Android Jetpack Navigation правильный задний стек с BottomNavigationView - PullRequest
0 голосов
/ 02 сентября 2018

OBS: Хотя по-прежнему нет поддержки первого класса (на момент написания этой статьи), Google теперь обновил свои образцы с примером того, как, по их мнению, это должно быть решено: https://github.com/googlesamples/android-architecture-components/tree/master/NavigationAdvancedSample

Android Codelab для навигации хорошо описывает, как использовать компонент архитектуры Navigation вместе с BottomNavigationView. Но скажем, у меня есть 2 вкладки в BottomNavigationView, Tab1 и Tab2 . И скажем, в Tab1 вы просматриваете фрагменты Frag1 -> Frag2 . Теперь, когда я перехожу на Tab2 , а затем обратно на Tab1 , стек фрагментов обратно Frag1,2 исчезает и заменяется начальной точкой Frag1 снова.

Что я должен сделать в приложении, чтобы BottomNavigationView вместе с Navigation сохраняли свой задний стек без изменений, даже если я меняю вкладки? А также поддержание синхронизации действий кнопок «назад» и «вверх» с рекомендациями.

Раньше я делал это с помощью ViewPager и управлял задним стеком, но это не похоже на правильный подход с новой навигацией.

Заранее спасибо!


Edit:

Более подробный ответ здесь .

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

В настоящее время это не поддерживается в новой навигационной архитектуре. Я также был очень огорчен этим, так как это очень простая функция в современных приложениях, и многие приложения теперь используют нижнюю навигацию. Есть бегущая нить, если вы хотите следить за ней. Они говорят, что придумают долгосрочное решение для этого, но для более короткого пути они дадут пример того, как справиться с этим. https://issuetracker.google.com/issues/80029773#comment25

0 голосов
/ 03 сентября 2018

Основная причина в том, что вы используете только один NavHostFragment для хранения всего заднего стека приложения.

Таким образом, решение заключается в том, что каждая вкладка должна содержать свой собственный задний стек.

  • В вашем основном макете оберните каждый фрагмент вкладки FrameLayout.
  • Каждый фрагмент вкладки представляет собой NavHostFragment и содержит свой собственный граф навигации, чтобы каждый фрагмент вкладки имел свой собственный задний стек.
  • Добавьте BottomNavigationView.OnNavigationItemSelectedListener к BottomNavigtionView для обработки видимости каждого FrameLayout.

Если вы не хотите хранить все фрагменты в памяти, вы можете использовать app:popUpTo и app:popUpToInclusive="true", чтобы вывести те, которые вы не хотите хранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...