2016-07-27 1 views
2

J'ai cette ligne Sime dans mon code:getHandler() NullPointerException lors de l'appel popBackstackImmediate() sur un FragmentManager

getChildFragmentManager().popBackstackImmediate(); 

Cela fonctionne parfois, mais plante souvent. Voici la pile:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' on a null object reference 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1646) 
      at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:585) 
      at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:600) 
      at marg.uk.fourthoffice.fragments.BCMasterDetailFragment.popBackStack(MyMasterDetailFragment.java:140) 
      at marg.uk.fourthoffice.activities.BCOfficeActivity.onBackPressed(MainActivity.java:173) 
      at marg.uk.fourthoffice.fragments.BCSwipeableCardsFragment$1.onClick(MyOtherFragment.java:189) 

Une idée pourrait être un problème?

+1

avez-vous lu [this] (https://code.google.com/p/android/issues/detail?id=183920) – Blackbelt

+0

Je l'ai fait, mais il semble qu'il n'y ait pas de solution. J'espérais que quelqu'un ici a trouvé une solution. – Guy

Répondre

0

Il s'est avéré qu'il y avait une erreur dans mon code.

Je ne peux pas montrer un exemple parce qu'il y avait un tas de problèmes avec mon architecture Activity-Fragment, mais le problème principal était que getChildFragmentManager était réellement vide et qu'il était appelé du mauvais fragment.

Cela se passait sur une tablette (mise en page à double volet) où il y avait 4+ fragments en vie en même temps. Cela a été appelé sur le mauvais fragment. Par conséquent, si vous rencontrez un problème similaire, vous pouvez avoir plusieurs instances du même fragment en mémoire. Assurez-vous que vous appelez cette méthode à partir de l'instance correcte.

+0

Pour moi, c'est arrivé à cause d'un mauvais appel de super méthode. La méthode surchargée onStop() appelait en quelque sorte 'super.onDestroy()' et la changeait en 'super.onStop()'. – Ashok