provoquant une java.IllegalStateException d'erreur, Pas d'Activité, seulement lors de la navigation de Fragment pour la DEUXIÈME fois
J'en suis très perplexe bug que je n'ai aucune idée de comment même de commencer à travailler à travers.
J'ai une application simple avec une activité, les points de vue sont mis en œuvre avec des Fragments. L'un des fragments a un ViewPager à l'intérieur de celui-ci; j'ai donc décidé que je voulais utiliser le getChildFragmentManager classe de la v4 bibliothèque de prise en charge. J'ai également eu à utiliser ActionBarSherlock, qui a causé un problème, car il n'est pas livré avec la v11 de la v4 de la bibliothèque.
J'ai résolu ce problème en remplaçant la v4 bibliothèque de prise en charge en ABS avec la v11 de la bibliothèque, et tout compilé et semblait être de travail, y compris la ViewPager.
Ici est la partie étrange:
La première fois le fragment avec le ViewPager s'ouvre, il fonctionne correctement, mais la DEUXIÈME fois, il est à utiliser pour la navigation, l'application se bloque, donnant un inutile trace de la pile. À partir de débogage, j'ai découvert que le problème était avec la FragmentManager retourné par getChildFragmentManager; il jette en l'Absence d'Activité d'erreur.
N'quelqu'un a une idée de ce que pourrait être la cause?
Je vais poster le code que vous jugez pertinente.
Merci,
David
- S'il vous plaît poster plein logcat de sortie
- Quel est exactement un "Non Activité" d'erreur? Comme dans le fragment n'est pas attaché à une activité? Quelle est la ligne de code à l'origine de l'erreur?
Vous devez vous connecter pour publier un commentaire.
J'ai suivi le lien dans jeremyvillalobos répondre (qui a été très utile) qui m'a conduit à cette solution de contournement.
Cela fonctionne pour moi, sans la nécessité de retrouver le fragment.
Cela semble être un bug signalé à
https://code.google.com/p/android/issues/detail?id=42601
La variable
FragmentManagerImpl mChildFragmentManager;
Dans Fragment.java n'est pas définie à null en détacher. Donc la prochaine fois que le fragment est chargé, la variable encore des points pour le dernier parent.
Comme discuté sur ce thread, une solution de contournement consiste à retrouver le Fragment.
Dans mon cas, j'étais à la commutation entre les fragments dans une ActionBar onglet. La difficulté Fragment a imbriquées Fragments et a été plantage de l'application lors de l'entrée dans le fichier loader Fragment. Donc, c'est le travail autour de code:
malheureusement, c'est un bug de soutien v4, toujours là 🙁
Lorsque vous choisissez d'autres Fragment via la Navigation Tiroir ou autre chose comme ça, le fragment qui a sous-fragments est détachée. Si ces sous-fragments fragmentManager(getChildFragmentManager()) n'existent plus. alors que ces fragments de retour, erreur s'est produite. De la bombe!
Évidemment, le soutien v4 devez nettoyer mChildFragmentManager dans onDetach(), mais il n'a pas, donc, nous devons compter sur nous-mêmes. comme les codes suivants dans le fragment qui a sous-fragments:
Tout sera OK, bonne journée 🙂
peut que votre erreur est android.vue.InflateException?
si oui,vous devez gonfler Fragment de façon dynamique ,ne pas utiliser XML de mise en page.
et, vous ne devriez pas fragment cible qui est défini en XML de Mise en page de Fragment de Transaction.
J'ai le même problème.
Dans une activité, j'ai 3 bouttons pour passer fragment de la transaction.remplacer(...)
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.layout_tablet_paneau, mLigneMessageFragment);
De ce fragment contient un ViewPage avec une coutume FragmentPagerAdapter. Donc, je dois faire getChildFragmentManager(), admis à imbriquée Fragments.
le constructeur est ici:
Donc, j'ai le même message d'erreur: Le premier spectacle de ce fragment wrorks, mais quand je montre de l'autre fragment et de revenir sur celui-ci, j'ai cette exception:
Donc au lieu de mettre le même exemple de fragment, je peux re-créer pour résoudre le problème, mais je ne semblent pas efficaces.
Référer @lopisan réponse:
- Je utiliser sa solution pour un long moment.
MAIS je figure sur une meilleure façon de le faire!
Si mChildFragmentManager.mActivity est nulle, puis définissez mChildFragmentManager à null. Lorsque performActivityCreated méthode.
Je suis coincé avec le même bug à l'aide de BottomNavigationView commutateur et le remplacement du fragment provoquant l'Application crash. Avec la vitesse normale, il a été fonctionne parfaitement bien, si l'utilisateur n'commutation rapide il utilisé pour planter en disant
dans les Journaux
Avant j'ai
Je pense que cette pré-création de fragment, et leur utilisation a été pour le remplacement de la création de la question, maintenant, je l'ai fait pour recréer à chaque fois. Il a commencé à travailler à
Espère que son utile pour certains, j'ai fait trop de défensive de codage mais il a résolu mon problème de changement rapide des fragments
Veuillez vérifier le numéro 32 de ce lien :
Enfant FragmentManager conservés après le détachement parent Fragment
Suit: