Question

Comment effacer BackStackEntries dans FragmentManager? Voici le code que j'utilise pour changer mon objet fragment:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Fragment homeFragment = new Home();
fragmentTransaction.replace(R.id.mainFragement, homeFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

Dans une situation particulière je dois supprimer les entrées complètes de backstack. Je ne trouve pas de méthode particulière pour ce fragment dans le gestionnaire. Avez-vous des idées?

Était-ce utile?

La solution

Je travaille sur une méthode que je pense ce que ce que vous demandez de faire, mais la seule chose que je ne pu trouver de la documentation est de savoir si ou non cette méthode vide juste le BackStack ou s'il y a une implication sur le récipient de vue. Au fond, il trouve l'entrée située au sommet de la pile tout et supprime, y compris l'entrée. Si quelqu'un d'autre pense qu'il ya des implications négatives me le faire savoir parce que je serais très curieux:

public static void clearBackStack(FragmentManager manager){
    int rootFragment = manager.getBackStackEntryAt(0).getId();
    manager.popBackStack(rootFragment, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

Autres conseils

Cela fonctionne bien pour moi:

clearFragments(FragmentManager fm) {
    while (fm.popBackStackImmediate());
}

Vous avez raison, il n'y a aucun moyen de compensation de la pile pour autant que je peux lire la documentation.

Ceci est un gros problème. Essayez de télécharger la question à l'autre Android Tracker et j'espère que quelqu'un regarde. Je suis toujours en attente moi.

Ceci est tout à fait pirater mais vous pouvez essayer la finition de votre Activity et commencer à nouveau. Il pourrait effacer la pile.

Si vous voulez effacer toute la pile de retour est probablement parce que vous allez faire quelque chose qui est pas lié avec le contexte précédent. Dans ce cas, vous devez lancer une nouvelle activité.

Comme je commence à comprendre, avec des fragments, activités fonctionnera comme conteneurs de fragments. Vous devriez essayer de garder entre Fragments indépendance, tout en les organisant dans les activités en fonction de leur contexte.

Dans votre cas, lorsque la situation se produit, vous pouvez lancer une nouvelle activité et placer le fragment souhaité sur cette nouvelle activité au lieu de placer dans l'ancienne activité. Cette nouvelle activité se chargera de la nouvelle pile de fragments. De cette façon, vous aurez également votre code un peu plus encapsulé, non?

Jetez un oeil à cette réponse explicative: CommonsWare réponse

espère que cela aide!

Avez-vous essayé popBackStack () les appels dans le gestionnaire Fragment?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top