2011-03-17 9 views
1

저는 메인에서 일부 버튼을 설치하는 하위 클래스를 사용하고 있습니다. 나는 자식 내에서 TotalMoney와 같이 main에서 생성 된 변수를 변경할 수 있습니다.FindViewById null 자식 클래스에서 사용되는 경우

findViewById가 nullpointer 예외를주는 문제가 있습니다. buildthem() 내의 코드는 메인 클래스에서 사용될 때 잘 동작합니다.

setContentView (R.layout.main);을 사용하고 있습니다. 메인에서 OnCreate 내에서. Child 클래스는 인스턴스화되어 메인 클래스의 OnResume에서 호출됩니다.

자식에도 ContentView를 설정해야하나요, 아니면 메인 클래스의 콘텐츠 뷰를 어떻게 든 전달해야하나요? 루프가 각 버튼에 관련 것들에 대한 필요에 대한 전체 코드가

  for(i=0; i<buttonIDs.length; i++) {     
        Button b = (Button) findViewById(buttonIDs[i]); 
//do other stuff  
    } 

를 사용하기 때문에

package com.chewyapps.markettrader; 

     class child extends main { 

    void buildthem(){ 

     TotalMoney = TotalMoney + 9999; 


      Button MenuButton = (Button) findViewById(R.id.Menu); 
      //etc 

    } 
} 

나는 한 OnCreate에서 findViewById를 할 수 없다. 전체 코드가 작동한다고 가정해도 기본적인 예제가 작동 할 수 있습니다.

내가 사용하는 그것은이 문제를 언급하기 전에 나에게 발생하지 않았다, 그러나 자식 클래스는 onResume 내 main.java 파일에서, child.java라는 별도의 파일에 있습니다

child childObject = new child(); 
    childObject.buildthem(); 

답변

1

왜 다음 매개 변수로 buildthem()MenuButton를 통과 할 수 있습니다 또는 귀하의 디자인에 따라, 직접 참조, onCreate()에서

Button MenuButton = (Button) findViewById(R.id.Menu); 

:이 줄을 넣어.

Java 규칙은 변수 이름을 소문자로 시작하는 것입니다. 따라서 menuButtonMenuButton이 아닙니다.

편집
그럼 왜 나중에 반복 할 수 onCreate()에서 Button의 배열을 만들 수 없습니다?

Button myButtons[] = new Button[buttonIDs.length]; 
for(int i=0; i<buttonIDs.length; i++) {     
    myButtons[i] = (Button) findViewById(buttonIDs[i]); 
} 

그런 다음 당신의 자식 클래스에서 myButtons 배열을 반복.

+1

좋은 점. – trgraglia

+0

제발 편집 해주세요 편집 해주세요. –

+0

@ 톰 humphries가 내 대답을 업데이트했습니다. –

0

무엇에 대해 : 이름 지정 규칙에 대한

Button MenuButton = (Button) this.findViewById(R.id.Menu); 

또는

Button MenuButton = (Button) Child.this.findViewById(R.id.Menu); 
+0

흠 이것들은 어떤 차이도없는 것처럼 보입니다 : ( –

+0

의미 : Button MenuButton = (Button) Parent.this.findViewById (R.id.Menu); – trgraglia

+0

그 일식을 보면 "main 범위에서 접근 가능하다 " –

관련 문제