пропустил)
Столкнулся с проблемой сложной навигации, multiple backstack. А точнее с программным переключение defaultNavHost.
Необходимо, что бы когда пользователь переходил на Main Screen использовался backstack для nav_graph_bottom_menu.
Когда перешел на Settings снова бы использовался nav_graph_main (что бы при нажатии Back использовался нужный NavGraph)
Можно изначально задать какой будет defaultNavHost (PrimaryNavigationFragment), но как это сделать динамически нигде не нашел, хотя идея до жути проста и понятна
Кто с таким сталкивался?
А разве в BottomNavigationView + Navigation Component при переходе по вкладкам используется бэкстэк?
Да, если ты вставляешь NavHostFragment, соответственно оно вставляет еще 1 NavGraph и соответственно создаётся еще один backstack. А как Андроид определяет какой backstack использовать, если есть несколько NavHostFragment? Ты в одном из них ставишь defaultNavHost = true <androidx.fragment.app.FragmentContainerView ... app:defaultNavHost="true ... />
Иметь несколько NavHostFragment - в принципе так себе практика. Гугл явно на это не рассчитывала, разрабатывая Navigation Component. Их best practice - один нормальный NavHostFragment.
Думаю они действительно не проработали этот момент. Но если есть навигация верхнего уровня и нужно вставить навигацию нижнего уровня (типа когда меняются экраны внутри фрагмента, как в YouTube, Instagram, то как тогда? Если бы
А в чём, собственно, у вас проблема? У меня вместо BottomNavigationView - боковая панель NavigationView(но суть то та же). Вся навигация нормально работает. Бэкстэк корректно отрабатывает.
тебе надо убрать bottom nav когда отроется например settings?
Да, это вариант! Но если нужно, что бы settings экран именно перекрывал экран с меню?
А для вас я вижу 2 варианта: 1. Как подсказали выше - скрытие панели BNV 2. Поместить BNV в отдельный фрагмент
Если отказаться от Navigation Component, то можно посмотреть в сторону библиотеки Modo от terrarok (создатель Cicerone), там есть нужный функционал из коробки. Можно открыть экран во вкладке, скажем так, а есть возможность всего в одну команду открыть экран поверх. Сам у себя такое реализовывал. У него в гите есть хороший пример со всем функционалом.
О, посмотрю эту библиотеку, возможно действительно хорошая штука! Спасибо)
Какие тут люди)))
О, здарова)
Обсуждают сегодня