Volevo solo aggiungere: -
Esci dal backstack usando quanto segue
fragmentManager.popBackStack ()
si tratta solo di rimuovere i frammenti dalla transazione, in nessun modo rimuoverà il frammento dallo schermo. Quindi, idealmente, potrebbe non essere visibile a te, ma potrebbero esserci due o tre frammenti sovrapposti l'uno sull'altro, e premendo il tasto Indietro l'interfaccia utente può apparire ingombra, impilata.
Basta fare un semplice esempio: -
Supponiamo di avere un frammento A che carica Fragmnet B usando fragmentmanager.replace () e quindi aggiungiamo ToBackStack per salvare questa transazione. Quindi il flusso è: -
PASSAGGIO 1 -> Frammento A-> Frammento B (siamo passati al frammento B, ma il frammento A è in background, non visibile).
Ora fai qualche lavoro nel frammento B e premi il pulsante Salva, che dopo il salvataggio dovrebbe tornare al frammento A.
PASSAGGIO 2-> Al salvataggio di FragmentB, torniamo a FragmentA.
PASSAGGIO 3 -> Quindi l'errore comune sarebbe ... nel frammento B, faremo frammento Manager.replace () fragmentB con frammentoA.
Ma quello che sta realmente accadendo, stiamo caricando di nuovo il frammento A, sostituendo il frammento B. Quindi ora ci sono due frammenti A (uno da STEP-1 e uno da questo STEP-3).
Due istanze di frammenti A sono sovrapposte, che potrebbero non essere visibili, ma è lì.
Quindi, anche se cancelliamo il backstack con i metodi sopra, la transazione viene cancellata ma non i frammenti effettivi. Quindi idealmente in un caso così particolare, premendo il pulsante Salva è sufficiente tornare al frammento A semplicemente facendo fm.popBackStack () o fm.popBackImmediate () .
Quindi, corretto Step3-> fm.popBackStack () torna al frammento A, che è già in memoria.