2015-01-13 5 views
-2

저는 Android Studio에서 매우 새로 워서 도움이 필요한 것이 많습니다.FindViewByID - 널 포인터 예외! [ANDROID STUDIO]

이들 중 하나는 성가신 findViewById()입니다. (다시 가장 중요한 부분)

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 

나도 알아, 당신의 많은 생각 kreiscalc을 그 다음은

그것은 항상 나에게 그 오류를 제공 MainActivity.java

public class MainActivity extends ActionBarActivity { 

public Button kreisd; 
public Button kugeld; 
public Button kreiscalc; 

public Context con; 

public EditText radius_eingabe; 

public TextView kreis_ergebnis_vol; 
public TextView kreis_ergebnis_G; 

public String str1; 

public double st1; 
public double G_kreis; 
public static final double PI = 3.141592653589793d; 


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

    kreisd = (Button)findViewById(R.id.kreis); 
    kugeld = (Button)findViewById(R.id.kugel); 
    kreiscalc = (Button)findViewById(R.id.calc_kreis); 

    kreisd.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      con = MainActivity.this; 
      setContentView(R.layout.kreislay); 
     } 
    }); 

    kreiscalc.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      con = MainActivity.this; 

      str1 = radius_eingabe.toString(); 
      st1 = Double.parseDouble(str1); 
      G_kreis = PI*st1*st1; 
      kreis_ergebnis_G = (TextView)findViewById(R.id.G_kreis); 
      kreis_ergebnis_G.setText("" + G_kreis); 



     } 
    }); 


}` 

내의 가장 중요한 부분입니다 , (오류를 일으키는 버튼)이 존재하지 않습니다! 하지만 그렇습니다. 나는 두 가지 다른 레이아웃을 가지고 있습니다 : 하나는 다른 모든 것들이 있고, 다른 하나는 kreiscalc입니다. 그러면 findViewById() - 메소드는 첫 번째 (및 주) 레이아웃에있는 ID 만 찾습니다. 도움이 필요해. 주목 해 주셔서 감사합니다!

편집 : 알았어요! LayoutInflanter를 사용하기 만하면됩니다. SO :

final LayoutInflanter lf = getLayoutInflanter(); View view2 = lf.inflate(R.layout.YOURLAYOUTNAME, null); Button kreiscalc = (Button) view2.findViewById(R.id.calc_kreis);

+0

잘 kreiscalc가 null이므로 calckreis에 ID가 없거나 프로젝트를 다시 작성해야합니다. c) _이 문제를 일으킬 수 있습니다. – tung

+1

편집 : 예, kreiscalc를 검색합니다. 이 때문에 메인 레이아웃 :'setContentView (R.layout.activity_main);' – olyv

답변

1

은 지금까지 나는 ID calc_kreis있는 버튼은 "현재"보기에 존재하지 않는 이해하고 왜 findViewById 반환는 null입니다.

방법 findViewByIdsetContentView에 설정 한보기에 포함 된 위젯 만 반환합니다. 버튼이 다른보기에 있으면 코드가 작동하지 않습니다.

+0

좋아요! 지금까지 감사드립니다.하지만 다른보기에서 ID를 찾을 수 있도록 어떻게 변경합니까? – Niemand

+0

@Niemand : 나는 당신이 그렇게 할 수있는 방법이 없다는 것을 알고 있습니다. 활성보기의 컨트롤에만 액세스 할 수 있습니다. 잠재적 인 해결책은 다른 시각에 대해 다른 활동을 만드는 것입니다. 그것은 더 이해할 수 있습니다. –

-1

예 findViewById는 활성보기에서만보기를 찾습니다.

+0

UI 요소가 깜박임 findViewById를 봅니다. 광부 도이체는 영어보다 더 나쁩니다. – danny117

+0

독일어 Dammit은 많은 기술 매뉴얼에 나와 있습니다. – danny117