Компонент навигации Android + поток входа в систему + вложенный вид снизу Navigation

Я борюсь за создание навигации, как на изображении ниже, с компонентом навигации Android.

Мне нужен "поток входа в систему", проверьте, вошел ли пользователь в систему, а затем перейдите к основной части приложения (также очищая backstack). Основная часть содержит BottomNavigationView с тремя вкладками. Но если я нажму на значок настроек на панели инструментов, я также хочу отобразить полноэкранный фрагмент настроек.

Нужно ли было два NavHostFragment с отдельными навигационными графами? Если да, как я могу их объединить, а также иметь правильную обратную навигацию?

Любые идеи, как реализовать навигацию, как это с компонентами навигации Android?

1 ответ

Прежде всего, вы можете проверить условную навигацию

Во-вторых, вы можете сделать это с помощью только одного nav_graph. Но тебе нужен только одинActivityдля этого. После этого вы можете проверить это так:

navController.addOnDestinationChangedListener { _, destination, _ ->
         if(destination.id == R.id.mainFragment){
             if(userIsLoggedIn()){
              //start LoginFragment
              //hide bottom navigation
             }else{
                //show bottom navigation
             }
          } 
        }

Но ваш стартовый фрагмент должен быть MainFragment и нет LoginFragment

Интересно, почему вы использовали фрагмент везде? Фрагменты полезны, но не всегда. Он не откроется в полноэкранном режиме, если вы используете тот же контейнер для вашего фрагмента. Я думаю, что ваша проблема будет решена, если вы объявите страницу настроек как активность.

Кстати, ваша проблема может быть решена, если вы установите match_parent на высоту вашего контейнера и установите видимость BottomNavigationView. Примечание: если bottonNavView скрыт, ваш контейнер должен быть выровнен по дну

Вы можете использовать

navController.setGraph(R.navigation.xxxx)

внутри некоторых navController.

setGraph