Очистка фрагмента стека назад

Я работаю с 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 не будет вызван, потому что представление никогда не уничтожалось (никогда не вызывалось удалить / заменить на).

Другие вопросы по тегам