Вопрос

Как очистить 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 () в фрагментных менеджере?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top