J'utilise la bibliothèque de compatibilité Android pour implémenter des fragments et j'ai étendu l'exemple de mise en page afin qu'un fragment contienne un bouton qui déclenche un autre fragment.
Dans le volet de sélection sur la gauche, j'ai 5 éléments sélectionnables - A B C D E.
Chacun charge un fragment (via FragmentTransaction:replace) dans le volet de détails -a b c d e
Maintenant, j'ai étendu le fragment epour contenir un bouton qui charge un autre fragment e1également dans le volet de détails. J'ai fait ceci sur ela méthode onClick de fragment comme suit:
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details_frag, newFrag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
Si je fais les sélections suivantes:
E - e - e1 - D - E
Ensuite, le fragment eest dans le volet de détails. C'est bien et ce que je veux. Cependant, si j'appuie sur le backbouton à ce stade, cela ne fait rien. Je dois cliquer dessus deux fois car il e1est toujours sur la pile. De plus, après avoir cliqué, j'ai obtenu une exception de pointeur nul dans onCreateView:
Pour `` résoudre '' ce problème, j'ai ajouté ce qui suit chaque fois que A B C D Eest sélectionné:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
Vous vous demandez simplement si c'est la bonne solution ou si je devrais faire quelque chose de différent?