Je voulais juste ajouter: -
Sauter hors du backstack en utilisant
fragmentManager.popBackStack ()
consiste simplement à supprimer les fragments de la transaction, aucun moyen de supprimer le fragment de l'écran. Donc, idéalement, il peut ne pas être visible pour vous, mais il peut y avoir deux ou trois fragments empilés les uns sur les autres, et sur la touche arrière, l'interface utilisateur peut sembler encombrée, empilée.
Prenons juste un exemple simple: -
Supposons que vous ayez un fragmentA qui charge Fragmnet B à l'aide de fragmentmanager.replace () , puis nous ajoutons AddToBackStack, pour enregistrer cette transaction. Le flux est donc: -
ÉTAPE 1 -> FragmentA-> FragmentB (nous sommes passés à FragmentB, mais le fragment A est en arrière-plan, non visible).
Maintenant, vous travaillez dans fragmentB et appuyez sur le bouton Enregistrer - qui, après l'enregistrement, devrait revenir à fragmentA.
ÉTAPE 2-> Sur sauvegarde de FragmentB, nous revenons à FragmentA.
ÉTAPE 3 -> Une erreur courante serait donc ... dans le Fragment B, nous allons faire fragment Manager.replace () fragmentB avec fragmentA.
Mais ce qui se passe réellement, nous chargeons à nouveau le fragment A, en remplaçant le fragmentB. Il y a donc maintenant deux FragmentA (un de STEP-1 et un de STEP-3).
Deux instances de FragmentsA sont empilées l'une sur l'autre, ce qui n'est peut-être pas visible, mais elle est là.
Donc, même si nous effaçons le backstack par les méthodes ci-dessus, la transaction est effacée mais pas les fragments réels. Donc, idéalement dans un tel cas particulier, en appuyant sur le bouton Enregistrer, vous devez simplement revenir à fragmentA en faisant simplement fm.popBackStack () ou fm.popBackImmediate () .
Donc, corrigez Step3-> fm.popBackStack () pour revenir à fragmentA, qui est déjà en mémoire.