FragmentManager popBackStack n'enlève pas le fragment

Je suis la mise en œuvre de la navigation dans le menu à l'aide de Fragments. J'ai donc commencer avec la Maison, et alors les utilisateurs peuvent naviguer vers les différentes sections et les détails de chaque section.

Lorsqu'un utilisateur change de section, puis j'appelle la pop sur le fragmentmanager backstack jusqu'à ce que je la Maison, puis de charger la nouvelle section.

C'est tout fonctionne comme prévu. Mais je reçois ce problème:

  1. charge d'une section des appels setHasOptionsMenu(true) sur onResume()
  2. charge un autre article (ancien article il est suposed pour sortir de la pile). Je le vois sur OK. Aucun menu n'est affiché
  3. quitter l'application (par exemple, aller à Android Laucher de l'activité) et puis quand je rentre, je vois la bonne section, mais elle montre le Menu de l'ancien Fragment.

J'ai réitéré la backstack et imprimés chaque fragment, et ce n'est pas le fragment avec le menu.

J'ai mis une version de débogage de marque sur le onResume (), méthode (où le setHasOptionsMenu(true) est marqué) et en effet, il en saisit ici, de sorte que le Fragment, il est encore quelque part.

Je veux savoir si je suis en train de faire quelque chose de mal et comment pourrais-je le résoudre, merci

Mise à jour:

Je suis en utilisant ce code pour charger de nouveaux fragments

fm.beginTransaction()
    .add(container, sectionFragment.getFragment())
    .addToBackStack(sectionFragment.getFragmentName())
    .commit();

Et pour les supprimer:

private void clearStack(){
int count = fm.getBackStackEntryCount();
    while(count > 1){
        fm.popBackStack();
        count--;
    }
}

NOTE 1: je suis en utilisant ajouter au lieu de les remplacer parce que je ne veux pas perdre mon état de fragment, quand je revenir en arrière à partir de la section détail. Lorsque je charge un autre article, puis-je appeler clearStack à la pop de la pile jusqu'à 1, puis charge le nouveau fragment. À la fin, je vais appeler executePendingTransactions() pour terminer de retirer les fragments provenant de la transaction.

NOTE 2: je vois que c'est entrer sur mon fragment onDestroy() la méthode, de sorte qu'il est suposed à être détruit. Mais je ne sais pas pourquoi il est appelé de nouveau lorsque la reprise de l'activité.

afficher votre code.
Utilisez-vous FragmentTransaction.ajouter ou FragmentTransaction.remplacer ?

OriginalL'auteur edrian | 2014-05-06