Chciałem tylko dodać:
Wyskakujące ze stosu za pomocą następujących
fragmentManager.popBackStack ()
chodzi tylko o usunięcie fragmentów z transakcji, w żaden sposób nie usunie tego fragmentu z ekranu. Idealnie więc może nie być dla ciebie widoczny, ale mogą znajdować się dwa lub trzy fragmenty ułożone jeden na drugim, a po naciśnięciu klawisza wstecz interfejs użytkownika może wyglądać na zagracony, ułożony w stos.
Biorąc prosty przykład: -
Załóżmy, że masz fragment A, który ładuje Fragmnet B za pomocą fragmentmanager.replace (), a następnie dodajemyToBackStack, aby zapisać tę transakcję. Więc przepływ jest:
KROK 1 -> Fragment A-> Fragment B (przenieśliśmy się do Fragmentu B, ale Fragment A jest w tle, niewidoczny).
Teraz wykonujesz trochę pracy we fragmencie B i naciskasz przycisk Zapisz - który po zapisaniu powinien wrócić do fragmentu A.
KROK 2-> Po zapisaniu Fragmentu B wracamy do Fragmentu A.
KROK 3 -> Tak częstym błędem byłoby ... we fragmencie B, zrobimy fragment Manager.replace () fragmentB z fragmentem A.
Ale to, co się faktycznie dzieje, ponownie ładujemy Fragment A, zastępując Fragment B. Więc teraz są dwa FragmentA (jeden ze STEP-1 i jeden z tego STEP-3).
Dwa wystąpienia Fragmentów A są ułożone jeden na drugim, co może nie być widoczne, ale już tam jest.
Więc nawet jeśli wyczyścimy backstack powyższymi metodami, transakcja zostanie wyczyszczona, ale nie rzeczywiste fragmenty. Idealnie więc w takim szczególnym przypadku po naciśnięciu przycisku Zapisz wystarczy wrócić do fragmentu A, wykonując po prostu fm.popBackStack () lub fm.popBackImmediate () .
Więc popraw Step3-> fm.popBackStack () wróć do fragmentu A, który jest już w pamięci.