2012-07-06 3 views
0

런타임 동안 널 포인터 예외가 발생합니다. 나는 PagerView를 위해 2 개의 XML 파일에서 RelativeLayouts를 가져 왔는데, 나는 엉망인 것처럼 보인다. 오류의 원인은 무엇입니까?안드로이드 : PagerView Instanciation 동안 null 포인터 예외

도움 주셔서 감사합니다.

나는이 같은 structure-- player_turn_solution_component.xml이 이러한 XML 파일이 있습니다

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/player_turn_solution_component" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/solutionCaption" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="what do you see?" /> 

     <EditText 
      android:id="@+id/solutionInput" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/solutionCaption" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="20dp" 
      android:ems="10" > 

      <requestFocus /> 
     </EditText> 

    </RelativeLayout> 

내 instanciation 기능 :

@Override 
    public Object instantiateItem(View collection, int position) { 
     //Our specific component (TextView or ImageView, depending on posision 
     //is placed inside a RelativeLayout that acts as a container 
     RelativeLayout container = new RelativeLayout(pagerContext); 
     TextView caption = new TextView(pagerContext); 
     caption.setText("View: " + position); 
     caption.setTypeface(typeface); 
     caption.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20); 
     container.addView(caption); 

     RelativeLayout optionLayout = null; 
     TextView optionCaption = null; 

     if (position == 0) { 
      optionLayout = (RelativeLayout) findViewById(R.id.player_turn_solution_component); 
      optionCaption = (TextView) findViewById(R.id.solutionCaption); 
     } else if (position == 1) { 
      optionLayout = (RelativeLayout) findViewById(R.id.player_turn_clue_component); 
      optionCaption = (TextView) findViewById(R.id.clueCaption); 
     } 

     container.addView(optionLayout); 

     ((ViewPager) collection).addView(container,0); //get the container ready 
     return container; 
    } 

그리고 로그 캣 출력 :

07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.ViewGroup.addView(ViewGroup.java:3158) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.ViewGroup.addView(ViewGroup.java:3145) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at my.app.PlayerTurnActivity$HelpPagerAdapter.instantiateItem(PlayerTurnActivity.java:136) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:649) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.support.v4.view.ViewPager.populate(ViewPager.java:783) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1016) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.View.measure(View.java:12892) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.View.measure(View.java:12892) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.View.measure(View.java:12892) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1375) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:660) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.View.measure(View.java:12892) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2257) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.View.measure(View.java:12892) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1240) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.os.Looper.loop(Looper.java:137) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at android.app.ActivityThread.main(ActivityThread.java:4512) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561) 
07-06 09:30:22.337: E/AndroidRuntime(8418):  at dalvik.system.NativeStart.main(Native Method) 

편집 : 내 새 활동에는 다음이 포함되지만 cras 페이징 뷰를 변경하기 위해 스 와이프 한 경우에만 동일한 NPE를 사용합니다.

if (position == 0) { 
     View v = getLayoutInflater().inflate(R.layout.player_turn_solution_component, null);     
     optionLayout = (RelativeLayout) v.findViewById(R.id.player_turn_solution_component); 
    } else if (position == 1) { 
     View v = getLayoutInflater().inflate(R.layout.player_turn_clue_component, null);  
     optionLayout = (RelativeLayout) v.findViewById(R.id.player_turn_clue_component); 
    } 

    container.addView(optionLayout); 

    ((ViewPager) collection).addView(container,0); //get the container ready 
    return container; 
+0

optionLayout 같은 것을는 null이 필요합니다. 어디에서 팽창 시켰습니까? –

+0

PlayerTurnActivity.java 파일의 No : 36 코드는 무엇입니까? –

+0

라인 36이 비어 있습니다. 또한, 나는 그것을 아무 곳에도 부풀게하지 않았다. 그게 틀림 없어! –

답변

1

는이

View v = getLayoutInflater().inflate(R.layout.layout_taht_have_player_turn_solution_component, null); 

if (position == 0) { 
      optionLayout = (RelativeLayout) v.findViewById(R.id.player_turn_solution_component); 
      optionCaption = (TextView) v.findViewById(R.id.solutionCaption); 
     } 
+0

첫 번째보기를 표시하는 데 도움이되었지만 다음 호출기보기로 전환하면 충돌이 발생합니다. 원래 질문에 새 코드를 추가했습니다. –

+0

레이아웃'player_turn_clue_component'에는'player_turn_clue_component'와'clueCaption'이 없습니까? –

+0

LogCat에 따르면 문제는 container.addView (optionLayout)에 있으며 두 레이아웃을 전환하면 실행되지만 페이저보기가 변경되면 다시 충돌합니다. 약간보기 만해도 다음보기를 볼 수 있지만 실제로 다음보기로 이동하지 않아도 충돌하지 않습니다. –