2014-12-10 3 views
0

내 탐색 창에서 동일한 단편을 사용하지만 해당 단편의 TextView에 다른 값을 사용하는 세 가지 옵션을 만들려고합니다. 탐색 서랍 항목을 선택하면 TextView가 변경됩니다.

내가 안드로이드 Studio와 함께 표준 탐색 창 작업을 생성하고 제목을 변경 동일한 방법으로의 setText를 사용하려고 아래 참조 :

public void onSectionAttached(int number) { 
     switch (number) { 
      case 1: 
       mTitle = getString(R.string.title_section1); 
       Namn.setText("Item 1"); 
       break; 
      case 2: 
       mTitle = getString(R.string.title_section2); 
       Namn.setText("Item 2"); 
       break; 
      case 3: 
       mTitle = getString(R.string.title_section3); 
       Namn.setText("Item 3"); 
       break; 
     } 
    } 

나는 즉시 응용 프로그램이 강제로 닫힙니다 실행하려고 할 때 이 오류가 발생합니다 :

Process: com.test.je.test, PID: 22605 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.je.test/com.test.je.test.MainActivity}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236) 
      at android.app.ActivityThread.access$800(ActivityThread.java:138) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5034) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.test.je.test.MainActivity.onSectionAttached(MainActivity.java:68) 
      at com.test.je.test.MainActivity$PlaceholderFragment.onAttach(MainActivity.java:153) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126) 
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739) 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 
      at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548) 
      at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171) 
      at android.app.Activity.performStart(Activity.java:5251) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2160) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236) 
            at android.app.ActivityThread.access$800(ActivityThread.java:138) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5034) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611) 
            at dalvik.system.NativeStart.main(Native Method) 

TextView를 사용하여 TextView를 선언했습니다. Namn; 및 Namn = (TextView) findViewById (R.id.twnamn);

내가 뭘 잘못하고 있니?

+0

서랍 여러 textviews이있을 것이다 : 여기

는 코드입니다. 그래서 그들은'twnamn'이 그들의 id를 가지지 않을 것입니다. id가 아닌 다른 것을 검색해야합니다. –

+0

태그에 태그를 지정하려고 시도합니다. –

+0

android studio에서 제공하는 탐색 용 보일러 플레이트 코드를 사용하고 있습니까? 그렇다면 사용자가 섹션을 선택할 때마다 조각을 첨부하지 않는지 확인하십시오 (기본 동작이므로). TextView에 들어가기 전에 TextView에 액세스하려고 했으므로 nullPointerException이 발생했을 수 있습니다. – feresr

답변

1

그래서 @feresr 사용자는 자신의 의견에 무엇이 잘못되었는지 이해할 수있게 도와주었습니다.

대신 onCreateView() 메소드에서 if 문을 작성하여 문제를 해결했습니다.

조각을 만든 후에도 textview를 선언해야했습니다. 그들은 각 행에 표시되기 때문에

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView; 
      Bundle args = getArguments(); 
      int currentView = getArguments().getInt(ARG_SECTION_NUMBER); 

      if(currentView == 1){ 
       rootView = inflater.inflate(R.layout.fragment_main, container, false); 
       TextView Namn = (TextView) rootView.findViewById(R.id.twnamn); 
       Namn.setText("Val 1"); 
      }else if(currentView == 2){ 
       rootView = inflater.inflate(R.layout.fragment_main, container, false); 
       TextView Namn = (TextView) rootView.findViewById(R.id.twnamn); 
       Namn.setText("Val 2"); 
      }else if(currentView == 3){ 
       rootView = inflater.inflate(R.layout.fragment_main, container, false); 
       TextView Namn = (TextView) rootView.findViewById(R.id.twnamn); 
       Namn.setText("Val 3"); 
      }else { 
       rootView = inflater.inflate(R.layout.fragment_main, container, false); 
      } 


      return rootView; 
     }