web-dev-qa-db-fra.com

ViewPager FragmentPagerAdapter Nullpointer

J'ai obtenu cette erreur en utilisant ViewPager dans le Android Support package . From the Horizontal View Swiping with ViewPager Tutorial

06-19 13:07:25.950: E/AndroidRuntime(16382): FATAL EXCEPTION: main
06-19 13:07:25.950: E/AndroidRuntime(16382): Java.lang.NullPointerException
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.Java:347)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.support.v4.app.BackStackRecord.add(BackStackRecord.Java:342)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.Java:97)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.support.v4.view.ViewPager.addNewItem(ViewPager.Java:649)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.support.v4.view.ViewPager.populate(ViewPager.Java:783)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.support.v4.view.ViewPager.onMeasure(ViewPager.Java:1016)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.View.measure(View.Java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.Java:594)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.widget.RelativeLayout.onMeasure(RelativeLayout.Java:376)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.View.measure(View.Java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:4698)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:293)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.View.measure(View.Java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:4698)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.Java:1369)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.widget.LinearLayout.measureVertical(LinearLayout.Java:660)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.widget.LinearLayout.onMeasure(LinearLayout.Java:553)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.View.measure(View.Java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:4698)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:293)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at com.Android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.Java:2092)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.View.measure(View.Java:12728)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.ViewRootImpl.performTraversals(ViewRootImpl.Java:1064)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.view.ViewRootImpl.handleMessage(ViewRootImpl.Java:2442)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.os.Handler.dispatchMessage(Handler.Java:99)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.os.Looper.loop(Looper.Java:137)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Android.app.ActivityThread.main(ActivityThread.Java:4424)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Java.lang.reflect.Method.invokeNative(Native Method)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at Java.lang.reflect.Method.invoke(Method.Java:511)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:784)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:551)
06-19 13:07:25.950: E/AndroidRuntime(16382):    at dalvik.system.NativeStart.main(Native Method)
34
passsy

Juste au cas où quelqu'un ne lirait pas les commentaires de la réponse de passsy, voici un résumé des réponses utiles:

1) Examinez votre méthode getItem(int index) de très près et recherchez toute logique, scénario ou instruction 'break' manquante qui pourrait vous amener à un fragment null.

2) Vérifiez que le nombre renvoyé par getCount() correspond au nombre de fragments retournés dans getItem(int index).

3) Examinez vos importations et assurez-vous de ne pas mélanger Android.app.Fragment avec Android.support.v4.app.Fragment

75
Chris Knight

C'est une solution simple. J'ai mélangé Android.app.Fragment et Android.support.v4.app.Fragment

j'espère que cela aide quelqu'un

18
passsy

Si getItem () dans votre adaptateur retourne null qui peut provoquer une exception de pointeur null.

6
TisSarah