Очистка фрагмента стека назад
Я работаю с fragments
и навигационный поток, как
Fragment A -> Fragment B -> Fragment C -> Fragment D
форма fragment
Мне нужно перейти к fragment
Очистка стека назад, но проблема в onCreateView()
метод fragment
Я показываю один диалог
Когда я перемещаюсь от D к A, очищая задний стек fragment
Появляется такое же всплывающее окно, которое было показано на фрагменте C
ниже приведен код, который я использую для очистки стека
FragmentManager fm = getActivity().getSupportFragmentManager();
for (int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
1 ответ
Ваша проблема заключается в том, как вы справляетесь с жизненным циклом фрагментов. Вы хотите, чтобы фрагмент C сделал onCreateView
только один раз (чтобы показать всплывающее окно), но onCreateView
get вызывается каждый раз, когда создается представление (например, каждый раз, когда вы вызываете remove для фрагмента (replace работает примерно так же, remove + add), а затем добавляет его обратно из backstack с помощью popbackstack).
Для ваших проблем есть два решения:
Более чистый: вместо показа всплывающего окна onCreateView
позвони из onCreate
во фрагменте C. При этом вы гарантируете, что он вызывается только при создании экземпляра фрагмента.
Не так чисто: вместо использования replace
между транзакциями фрагмента C и D, вызов add
таким образом, когда вы вставляете backstack во фрагменте D, фрагменте C onCreateView
не будет вызван, потому что представление никогда не уничтожалось (никогда не вызывалось удалить / заменить на).