Android导航组件+登录流程+嵌套BottomNavigationView

时间:2019-04-02 08:24:21

标签: android android-navigation android-bottom-nav-view android-jetpack-navigation

我正在努力用Android导航组件构建一个导航,如下图所示。

我需要一个“登录流程”,检查用户是否已登录,然后导航到应用程序的主要部分(还清除了后退堆栈)。主要部分包含一个带有三个选项卡的BottomNavigationView。但是,如果我单击工具栏上的设置图标,我也想显示全屏的SettingsFragment。

我是否需要两个带有单独导航图的NavHostFragments?如果可以,如何合并它们并获得适当的backNavigation?

有什么想法如何使用android导航组件实现这样的导航?

enter image description here

3 个答案:

答案 0 :(得分:2)

首先您可以检查Conditional Navigation

第二,您只能使用一个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

答案 1 :(得分:0)

我想知道为什么在各处都使用片段?片段很有用,但并非始终如此。 如果您对片段使用相同的容器,它将无法全屏打开。我认为,如果将“设置”页面声明为“活动”,则将解决您的问题。

如果将match_parent设置为容器的高度并设置BottomNavigationView可见性,则可以解决您的问题。注意:如果bottonNavView隐藏,则您的容器应与底部对齐

答案 2 :(得分:0)

您可以使用

navController.setGraph(R.navigation.xxxx)

在一些navController内。

the setGraph