2013-10-02 2 views
0

나는이 같은 활동의 다른 조각의 버튼 클릭에 조각의 텍스트 뷰의 텍스트를 변경하려고 원인이 조각에 텍스트를 추가합니다.방법은 널 포인터

onCreateView는

TextView deckSize; 

같은 코드는 ONSTART 방법에서 잘 작동

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.deckbuilder_fragment, container, 
      false); 

    return view; 
} 

내가 텍스트 뷰가 onCreateView와 ONSTART 사이 방법의 외부 선언 한 클래스의 상단에 반환 onCreateView와 deckSize() 사이.

public void onStart() { 
    super.onStart(); 
deckSize = (TextView) getView().findViewById(R.id.decksize); 
    final SharedPreferences defaultDeck = getActivity() 
      .getSharedPreferences("defaultDeck", Context.MODE_PRIVATE); 
    deckSize.setText(String.valueOf(defaultDeck.getInt("decksize", 0))); 

}

하지만 널 포인터가 줄에서 여기에 어떻게 180

public void deckSize() { 
    deckSize = (TextView) getView().findViewById(R.id.decksize); //line 180 
    final SharedPreferences defaultDeck = getActivity() 
      .getSharedPreferences("defaultDeck", Context.MODE_PRIVATE); 
    deckSize.setText(String.valueOf(defaultDeck.getInt("decksize", 0))); 
} 

이것은 텍스트 뷰 내가 내장 텍스트 뷰가 있습니다.에 상주하는 조각으로 코딩하는 방법입니다 이 fragment의 XML 레이아웃 파일 이상하게도,이 방법 안에이 정확한 코드는 더 클래스 트리에서까지 같은 조각의 ONSTART 방법도 있고 그것을 잘 작동합니다. 나는 TextView deckSize를 onStart 메소드보다 먼저 클래스에서 선언했다. 다음은 관련된 logcat 텍스트입니다.

FATAL EXCEPTION: main 
java.lang.NullPointerException 
at com.maliciousgames.deckbuilder.DeckBuilderFragment.deckSize(DeckBuilderFragment.java:180) 
at com.maliciousgames.deckbuilder.DeckBuilder.deckSize(DeckBuilder.java:35) 
at com.maliciousgames.deckbuilder.BlockCardBrowserFragment$2.onClick(BlockCardBrowserFragment.java:105) 
at android.view.View.performClick(View.java:4240) 
at android.view.View$PerformClick.run(View.java:17721) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5103) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 

라인 (180) 내가 부모 활동

public void deckSize() { 

    DeckBuilderFragment deckBuilderFragment = new DeckBuilderFragment(); 
    deckBuilderFragment.deckSize(); 
} 

의 방법에서이 deckSize 방법에 호출하고이 라인

deckSize = (TextView) getView().findViewById(R.id.decksize); 

내가 부모의 메소드에 호출하고 이

((DeckBuilder) getActivity()).deckSize(); 
01,235,164 같은 동일한 상위에있는 다른 활성 단편에서 활동

난 아직 안드로이드와 자바 상당히 새로운 오전 정말 사람이 줄 수있는 어떤 도움이나지도를 부탁드립니다.

+0

내 가정은 내가해야, 메소드의 getView()가 당신이 onCreateView이 – Gustavo

+0

원인 null 값을 통해 findViewById를 호출하기 때문에 당신의 시도를 null을 반환하는 것입니다 언급했다. onCreateView가 이미 반환되었습니다. 실제로 나를 던지는 것은 onStart에서 정확히 동일한 코드에 null 포인터를 얻지 못한다는 것입니다. onStart는 onCreateView가 반환 된 후에도 실행됩니다. 나는 더 많은 코드를 보여주기 위해 나의 질문을 편집했다. –

+0

죄송 돌아올 때까지이 기능의 getView가 null이 될 것입니다 호출 어디 nullpointer – Trent

답변

0

좋아. Emmanuel은 올바른 방향으로 나를 지적 할 수있었습니다. 비슷한 상황에서 다른 사람들을 도울 수있는이 질문에 대답하고 있습니다.

이 첫번째 조각의 텍스트 뷰에 텍스트를 추가하려면, 당신은 단순히 주 (또는 부모) 활동 내부 공개 방법을 통해 수행 한 다음 두 번째 조각에서에 전화.

1

당신은 당신이 deckBuilderFragment.deckSize();getView()null을 반환 호출 할 때 따라서 당신이 그렇게보기를 팽창 적이없는, 그래서 onCreateView()가 아직 호출되지 않은

DeckBuilderFragment deckBuilderFragment = new DeckBuilderFragment(); 

deckBuilderFragment.deckSize(); 

마우스 오른쪽을 요구하고있다. 내가 SO에 다른 내용의 질문을 통해 지원을받을 수 있었다

+0

해당 코드를 추가 할 때 이클립스는 "인플레이터를 해결할 수 없습니다."및 "컨테이너를 변수로 해결할 수 없습니다"라고 말합니다. – Trent

+0

@ user2774908 제 편집을보세요. 팽창되지 않은 TextView 값을 설정할 수 없습니다. 무엇을 성취하려고합니까? – nedaRM

+0

그래, 고마워, 난 그냥 다른 조각에서 버튼을 만질 때 업데이 트 텍스트보기를 얻으려고하고 있습니다. 어떻게해야합니까? – Trent