2017-10-28 21 views
-1

편집 : 문제 프로젝트를 재구성 한 후 해결되었습니다.findViewById 관련 활동에서보기를 찾을 수 없습니다.

두 가지 활동간에 데이터를 공유하는 앱을 만들고 있습니다. 두 개의 액티비티 이름 : 1. MainActivity 2.ScorerActivity

TextView 객체의 인스턴스를 ScorerActivity int로 만들려고 할 때 findViewById 메소드는 MainActivity 레이아웃에서 ID를 찾습니다. ScorerActivity 레이아웃에있는 뷰를 찾지 못합니다.

MainActivity 자바

package com.example.android.badmintonscorer; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button startButton = findViewById(R.id.start_button); 
    startButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      EditText player1Name = findViewById(R.id.player1_name); 
      String player1 = player1Name.getText().toString(); 

      EditText player2Name = findViewById(R.id.player2_name); 
      String player2 = player2Name.getText().toString(); 

      Intent intent = new Intent(MainActivity.this, ScorerActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      intent.putExtra("player1_name", player1); 
      intent.putExtra("player2_name", player2); 
      startActivity(intent); 
     } 
    }); 
} 
} 

MainActivity 레이아웃

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context="com.example.android.badmintonscorer.MainActivity"> 

<EditText 
    android:id="@+id/player1_name" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:hint="Name of Player 1" 
    android:layout_marginTop="50dp"/> 

<EditText 
    android:id="@+id/player2_name" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:hint="Name of Player 2" 
    android:layout_marginTop="50dp"/> 

<Button 
    android:id="@+id/start_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Start" 
    android:layout_gravity="center_horizontal" 
    android:layout_marginTop="75dp" /> 

    </LinearLayout> 

ScorerActivity 자바

package com.example.android.badmintonscorer; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class ScorerActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_scorer); 

    TextView player1 = findViewById(R.id.p1name); //Cannot resolve symbol 
} 
} 

ScorerActivity 레이아웃

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#00f921" 
tools:context="com.example.android.badmintonscorer.ScorerActivity"> 

<LinearLayout 
    android:id="@+id/linearLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/p1name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:fontFamily="sans-serif-medium" 
      android:gravity="center_horizontal" 
      android:padding="16dp" 
      android:text="Player 1" 
      android:textSize="14sp" /> 

     <TextView 
      android:id="@+id/p1score" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:fontFamily="sans-serif-light" 
      android:gravity="center_horizontal" 
      android:paddingBottom="24dp" 
      android:text="0" 
      android:textSize="50sp" /> 

     <Button 
      android:id="@+id/p1plus1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="8dp" 
      android:layout_weight="1" 
      android:background="#f9bf00" 
      android:onClick="pointp1" 
      android:text="+1 Point" /> 

     <Button 
      android:id="@+id/p1df" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="8dp" 
      android:layout_weight="1" 
      android:background="#f9bf00" 
      android:onClick="dfp1" 
      android:text="Double Fault" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="2dp" 
     android:layout_height="match_parent"> 

     <TextView 
      android:layout_width="1dp" 
      android:layout_height="match_parent" 
      android:textColor="@android:color/darker_gray" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/p2name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:fontFamily="sans-serif-medium" 
      android:gravity="center_horizontal" 
      android:padding="16dp" 
      android:text="Player 2" 
      android:textSize="14sp" /> 

     <TextView 
      android:id="@+id/p2score" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:fontFamily="sans-serif-light" 
      android:gravity="center_horizontal" 
      android:paddingBottom="24dp" 
      android:text="0" 
      android:textSize="50sp" /> 

     <Button 
      android:id="@+id/p2plus1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="8dp" 
      android:layout_weight="1" 
      android:background="#f9bf00" 
      android:onClick="pointp2" 
      android:text="+1 Point" /> 

     <Button 
      android:id="@+id/p2df" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="8dp" 
      android:layout_weight="1" 
      android:background="#f9bf00" 
      android:onClick="dfp2" 
      android:text="Double Fault" /> 

    </LinearLayout> 
</LinearLayout> 

<Button 
    android:id="@+id/reset" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_below="@+id/linearLayout" 
    android:layout_marginLeft="24dp" 
    android:layout_marginStart="24dp" 
    android:layout_marginTop="65dp" 
    android:background="#f9bf00" 
    android:text="Reset" /> 

<Button 
    android:id="@+id/finish" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@+id/reset" 
    android:layout_centerHorizontal="true" 
    android:background="#f9bf00" 
    android:text="Finish" /> 

<Button 
    android:id="@+id/share" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignTop="@+id/reset" 
    android:layout_marginEnd="17dp" 
    android:layout_marginRight="17dp" 
    android:background="#f9bf00" 
    android:text="Share" /> 

    </RelativeLayout> 
+1

당신이지고있는 오류 메시지와 질문을 업데이트하십시오. –

+1

이 링크를 확인하십시오 - https://stackoverflow.com/a/10261558/7052400 –

+1

textview에서 캐스팅을 시도하십시오. 프로젝트를 정리하고 다시 빌드하십시오. android studio를 다시 시작하십시오. 도움이되기를 바랍니다 –

답변

-1

package com.example.android.badmintonscorer; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

    public class ScorerActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_scorer); 

     TextView player1 = (TextView)findViewById(R.id.p1name); 
    } 
    } 

깨끗한 프로젝트 아래 시도하고 코드를 다시 빌드합니다.

+2

OP의 문제를 해결하거나 다르게 수행되는 것을 언급 할 것으로 예상되는 이유에 대한 설명이없는 코드 블록을 제공하는 답변은 교육의 관점에서 볼 때 매우 유용합니다. SO는 또한이를 제공하려고합니다. 귀하의 답변을 편집하여 유용하게 활용하십시오. –

0

당신은 기억해야하는 View 개체를 반환하기 때문에이처럼 될 것입니다 버튼을 할당 예를 들어 그것의 적절한 서브 클래스로 캐스트해야 findViewById 방법 :

Button yourButton= (Button) findViewById(R.id.your_button_id); 

공지 사항 여기에 캐스팅 (Button) findViewById(...

따라서 모든 뷰를 변경하고 해당 하위 클래스로 캐스팅하십시오. 당신이 아래에 볼 수있는 방법 같은 :

MainActivity.java

Button startButton = (Button)findViewById(R.id.start_button); 
final EditText player1Name =(EditText) findViewById(R.id.player1_name); 
final EditText player2Name =(EditText) findViewById(R.id.player2_name); 
startButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     String player1 = player1Name.getText().toString(); 
     String player2 = player2Name.getText().toString(); 
     Intent intent = new Intent(MainActivity.this, ScorerActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.putExtra("player1_name", player1); 
     intent.putExtra("player2_name", player2); 
     startActivity(intent); 
    } 
}); 
} 

ScorerActivity.Java

public class ScorerActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_scorer); 
     TextView player1 = (TextView)findViewById(R.id.p1name); 
    } 
} 
+1

OP의 문제를 해결하거나 다르게 수행되는 것을 언급 할 것으로 예상되는 이유에 대한 설명이없는 코드 블록을 제공하는 대답은 교육의 관점에서 볼 때 거의 쓸모가 없습니다. SO는 또한이를 제공하려고합니다. 귀하의 답변을 편집하여 유용하게 활용하십시오. –

+0

@Marcin Orlowski ok 다음 번엔 처리해 줘. – mehul