Я просто хотів додати: -
Вискакуючи з рюкзака, використовуючи наступні
fragmentManager.popBackStack ()
йдеться лише про видалення фрагментів з транзакції, ніяким чином він не збирається видаляти фрагмент з екрану. Тож в ідеалі це може бути вам не видно, але можуть бути два-три фрагменти, складені один над одним, а при натисканні клавіші на звороті користувальницький інтерфейс може виглядати захаращеним, укладеним.
Просто взявши простий приклад: -
Припустимо, у вас є фрагмент A, який завантажує Fragmnet B, використовуючи fragmentmanager.replace (), і тоді ми робимо addToBackStack, щоб зберегти цю транзакцію. Отже, потік:
КРОК 1 -> FragmentA-> FragmentB (ми перейшли до FragmentB, але фрагмент A знаходиться у фоновому режимі, не видно).
Тепер ви виконуєте деяку роботу з фрагментом B і натискаєте кнопку «Зберегти», яка після збереження повинна повернутися до фрагменту A.
КРОК 2-> Після збереження FragmentB ми повертаємося до FragmentA.
КРОК 3 -> Отже, поширеною помилкою буде ... у фрагменті B ми зробимо фрагмент Manager.replace () фрагментB з фрагментомA.
Але що насправді відбувається, ми знову завантажуємо фрагмент A, замінюючи FragmentB. Отже, зараз є два FragmentA (один із STEP-1, а один із цього STEP-3).
Два екземпляри FragmentsA розміщені один над одним, що може бути не видно, але воно є.
Тож навіть якщо ми очистимо backstack вищезазначеними методами, транзакція очищається, але не фактичні фрагменти. Тому в ідеалі в такому конкретному випадку при натисканні кнопки збереження вам просто потрібно повернутися до фрагменту A, просто зробивши fm.popBackStack () або fm.popBackImmediate () .
Тож правильний Step3-> fm.popBackStack () повернеться до фрагменту A, який вже є в пам'яті.