Я просто хотел добавить:
Выскочить из backstack, используя следующие
fragmentManager.popBackStack ()
это просто удаление фрагментов из транзакции, и ни в коем случае не удаление фрагмента с экрана. Поэтому в идеале он может быть невидим для вас, но может быть два или три фрагмента, накладываемые друг на друга, и при нажатии клавиши «назад» пользовательский интерфейс может выглядеть загроможденным, сложенным.
Просто приведу простой пример:
Предположим, у вас есть фрагмент A, который загружает Fragmnet B с использованием fragmanager.replace (), а затем мы добавляем addToBackStack, чтобы сохранить эту транзакцию. Итак, поток:
ШАГ 1 -> FragmentA-> FragmentB (мы переместились в FragmentB, но Fragment A находится в фоновом режиме, не виден).
Теперь вы выполняете некоторую работу во фрагменте B и нажимаете кнопку «Сохранить», которая после сохранения должна вернуться к фрагменту A.
ШАГ 2-> При сохранении FragmentB мы возвращаемся к FragmentA.
ШАГ 3 -> Так что распространенная ошибка будет ... во фрагменте B мы сделаем фрагмент Manager.replace () фрагментB с фрагментом A.
Но что на самом деле происходит, мы снова загружаем фрагмент А, заменяя фрагмент Б. Итак, теперь есть два фрагмента A (один из STEP-1 и один из этого STEP-3).
Два экземпляра фрагментов A накладываются друг на друга, которые могут быть не видны, но они есть.
Таким образом, даже если мы очищаем backstack вышеупомянутыми методами, транзакция очищается, но не фактические фрагменты. Так что в идеале в таком конкретном случае при нажатии кнопки сохранения вам просто нужно вернуться к фрагменту A, просто выполнив fm.popBackStack () или fm.popBackImmediate () .
Так что правильно Step3-> fm.popBackStack () вернуться к фрагменту A, который уже находится в памяти.