Управлять Backstackentries в FragmentManager
-
24-10-2019 - |
Вопрос
Как очистить BackStackEntries
в FragmentManager
? Это код, который я использую, чтобы изменить свой объект фрагмента:
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Fragment homeFragment = new Home();
fragmentTransaction.replace(R.id.mainFragement, homeFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
В конкретной ситуации мне нужно удалить полные записи в обратном потоке. Я не нашел какого -либо конкретного метода для этого в фрагментных менеджере. У тебя есть идеи?
Решение
Я работал над методом, который, как я думаю, делает то, что вы просите, но единственное, что я смог выяснить из документации, это то, просто ли этот метод просто Просмотреть контейнер. По сути, он находит запись, расположенную в верхней части стека, и удаляет все, включая эту запись. Если кто -то еще думает, что есть негативные последствия, дайте мне знать, потому что мне было бы очень любопытно:
public static void clearBackStack(FragmentManager manager){
int rootFragment = manager.getBackStackEntryAt(0).getId();
manager.popBackStack(rootFragment, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
Другие советы
Это прекрасно работает для меня:
clearFragments(FragmentManager fm) {
while (fm.popBackStackImmediate());
}
Вы правы, невозможно очистить стек, насколько я могу прочитать документацию.
Это большая проблема. Попробуйте загрузить проблему в Android выпуск трекер И я надеюсь, что кто -то на это смотрит. Я все еще жду мой.
Это довольно взломать, но вы можете попробовать закончить свой Activity
и начать снова. Это может очистить стек.
Если вы хотите очистить весь задний стек, вероятно, это потому, что вы собираетесь сделать что -то, что не связано с предыдущим контекстом. В этом случае вам следует запустить новое занятие.
Как я начинаю понимать, с фрагментами, действия будут работать как контейнеры с фрагментами. Вы должны попытаться сохранить независимость между фрагментами, одновременно организовывая их в действиях на основе их контекста.
В вашем случае, когда возникает конкретная ситуация, вы можете запустить новое занятие и поместить желаемый фрагмент на это новое занятие вместо того, чтобы поместить его в старую активность. Это новое действие будет обрабатывать новую стопку фрагментов. Таким образом, у вас также будет немного более инкапсулированный код, не так ли?
Посмотрите на этот объяснительный ответ: Commonsware ответ
Надеюсь, поможет!
Вы пробовали вызовы popbackstack () в фрагментных менеджере?