Построение стека фрагментов для приложения 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. В противном случае, если у вас нет намерения, просто продолжайте свой поток как есть.