Управление фрагментом 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

Я надеюсь, что это поможет вам, его работа для меня