Попсовая обратная стека генерирует исключение «Fragment Al Уже добавлен» - PullRequest
1 голос
/ 19 сентября 2019

Я пытался решить самую странную проблему, связанную с управлением обратным стеком.

Цель состоит в том, чтобы иметь следующую логику (фрагменты представлены буквами A, B, C):

A -> B, B -> C, и когда backPressed, C -> A

, поскольку C может быть различными фрагментами, а когда в C и backPressed фрагмент B никогда не должен появляться, я добавляю переход A-> B к backstack и B-> C не добавляется, просто заменяется B на C, поэтому, когда я делаю backPress, C переходит к A.

Это работает отлично в первый раз - поведение такое, как и ожидалось,но когда я пытаюсь сделать это второй раз подряд, приложение вылетает:

getSupportFragmentManager().popBackStackImmediate()

, выдавая исключение:

java.lang.IllegalStateException: Fragment already added: FragmentC
...

Я пытался заменить на getSupportFragmentManager().popBackStack, но просто ошибка выдается через несколько наносекунд.

Есть ли какая-то причина, по которой при попытке извлечь фрагмент из стека возникает ошибка добавления его?Есть идеи, как это решить?

Заранее большое спасибо

1 Ответ

0 голосов
/ 19 сентября 2019

Это не выдает исключение из-за всплеска заднего стека, оно выбрасывает его из-за того, что (A) уже присоединено.Убедитесь, что вы используете удаление или замену при переходе к B и C, чтобы A не находился в добавленном / присоединенном состоянии.

...