Построение стека фрагментов для приложения One Activity Many Fragment

Мое приложение имеет только одно действие и множество фрагментов.

В XML моей деятельности у меня просто есть FrameLayout на котором я заменяю / добавляю / скрываю / показываю различные фрагменты.

Представить Fragment A это первый фрагмент, который видит пользователь при открытии приложения.

Нажмите что-нибудь в Fragment A запускать Fragment B и нажмите что-нибудь в Fragment B запускать Fragment C,

Таким образом, навигация может быть проиллюстрирована следующим образом:

Фрагмент A -> Фрагмент B -> Фрагмент C

Я хочу запустить приложение и показать Fragment C прямо из уведомления.

Тем не менее, как я могу обеспечить обратную навигацию от Fragment C, так как такой щелчок назад будет идти к Fragment B и нажав снова, перейдите к Fragment A?

т.е. как я могу ввести следующую структуру стека?

Фрагмент A <- Фрагмент B <- Фрагмент C

2 ответа

Решение

Да, ты можешь это сделать. С поддержкой библиотеки v26 вы можете собрать стек с фрагментами без значительных затрат. В своей деятельности сделайте следующее:

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new FragmentA())
            .addToBackStack("fragmentA")
            .setReorderingAllowed(true)
            .commit();

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new FragmentB())
            .addToBackStack("fragmentB")
            .setReorderingAllowed(true)
            .commit();

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new FragmentC())
            .addToBackStack("fragmentC")
            .setReorderingAllowed(true)
            .commit();

Имейте в виду, что FragmentA и FragmentB будут вести себя немного по-другому после нажатия на FragmentC из-за setReorderingAllowed. onCreateView не будет вызываться для FragmentA и FragmentB после того, как они были добавлены в стек, только в FragmentC будет вызываться onCreateView. Для FragmentA и FragmentB будет вызываться только onCreate.

То, что вы можете сделать, - использовать намерение уведомления, в котором вы передаете строку. В своей основной деятельности, если вы получите эту строку, создайте стек фрагментов из A, B и C. В противном случае, если у вас нет намерения, просто продолжайте свой поток как есть.

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