Управление фрагментом Backstack Flow без щелчков
- Я создал фрагмент AppCompatActivity Open A- > B- > C- > D- > E- > F
с заменой()
- Я нахожусь в F, который содержит кнопку, когда я нажимаю кнопку
Я хочу очистить фрагменты до C и вы хотите открыть G поверх C, поэтому новая последовательность будет A- > B- > C- > G. Я могу сделать это с помощью
popBackStackImmediate() и добавьте G поверх C с заменой функции.
Проблема. Когда я нажимаю кнопку, я вижу C на долю секунд, а затем отображается G. Чтобы предотвратить это, я попытался остановить анимацию с помощью , но C все еще отображается в течение секунды, даже когда анимация остановлена для фрагментов.
Есть ли лучший способ, с помощью которого мы можем конструировать поток фрагмента или способ решить этот щелчок при замене фрагмента поверх C?
Ответы
Ответ 1
Мне было так интересно узнать об этом вопросе, что я создал образец проекта и реализовал тот же вариант использования, который вы упомянули в своем вопросе. Вот как я справился с этим.
Используется этот метод для удаления фрагментов F, E, D из backstack
private void removeFragments() {
getSupportFragmentManager().popBackStack("F", FragmentManager.POP_BACK_STACK_INCLUSIVE);
getSupportFragmentManager().popBackStack("E", FragmentManager.POP_BACK_STACK_INCLUSIVE);
getSupportFragmentManager().popBackStack("D", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
Используется этот метод для замены фрагмента
private void replaceNewFragment(String key) {
getSupportFragmentManager().beginTransaction().addToBackStack(key)
.replace(android.R.id.content, AFragment.newInstance(key)).commit();
}
Вот видео-демонстрационное видео.
![введите описание изображения здесь]()
Здесь завершен этот проект на github
Ответ 2
Более общее решение для такого потока навигации, Заменить фрагмент, подобный этому
getSupportFragmentManager().beginTransaction().
replace(R.id.f_container,new FragmentA())
.addToBackStack("A")
.commit();
getSupportFragmentManager().beginTransaction().
replace(R.id.f_container,new FragmentB())
.addToBackStack("B")
.commit();
как мудрый сделать это до фрагмента F и позволяет предположить, что у вас есть кнопка отправки на F
теперь внутри кнопки onClick of submit
Поверните стек до D с помощью значка POP_BACK_STACK_INCLUSIVE, как показано ниже, и Add replace container с фрагментом G
getActivity().getSupportFragmentManager().popBackStack("D",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
getSupportFragmentManager().beginTransaction().
replace(R.id.f_container,new FragmentG())
.addToBackStack("G")
.commit();
Теперь, когда вы нажмете кнопку "Назад", вы увидите фрагмент C
Я надеюсь, что это поможет вам, его работа для меня