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 e
pour contenir un bouton qui charge un autre fragment e1
également dans le volet de détails. J'ai fait ceci sur e
la 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 e
est dans le volet de détails. C'est bien et ce que je veux. Cependant, si j'appuie sur le back
bouton à ce stade, cela ne fait rien. Je dois cliquer dessus deux fois car il e1
est 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 E
est 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?