登录-导航体系结构组件

时间:2018-10-03 12:10:10

标签: android android-architecture-components android-navigationview up-button android-architecture-navigation

我使用android导航架构组件实现了对LoginFragment的条件导航。我现在面临的问题是,我想隐藏工具栏上的向上按钮,并在用户未登录时禁用任何应用内导航。

我希望能够通过一种活动方式来实现这一点,其中,活动式设置了应用内导航界面和navController,就像在android sunflower演示中一样,导航目标是片段。

我实现了此处描述的条件导航: Navigation Architecture Component - Login screen

如何使用导航体系结构组件在登录屏幕上正确隐藏导航和向上按钮?

2 个答案:

答案 0 :(得分:2)

我不完全了解隐藏导航的含义,但我假设您的意思是隐藏抽屉布局。要隐藏向上按钮并锁定抽屉,请将以下内容添加到MainActivity的onCreate中。我正在使用Kotlin。

myNavController.addOnDestinationChangedListener { _, destination ->
    if (destination.id == R.id.loginFragment) {
        myDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
        myToolbar.setVisibility(View.GONE)
    } else {
        myDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
        myToolbar.setVisibility(View.VISIBLE)
    }

要使向上按钮消失,请使用myToolbar.setNavigationIcon(null),然后使其回到myToolbar.setNavigationIcon(R.id.my_icon)

答案 1 :(得分:1)

我的方法是将登录页面添加到根集中

    val navController = findNavController(R.id.main_nav_host)
    val appBarConfiguration = AppBarConfiguration(setOf(R.id.home_dest, 
        R.id.user_dest,R.id.login_dest))
    toolbar.setupWithNavController(navController, appBarConfiguration)

因此,当您在登录页面上时,没有后退按钮。

系统后退按钮可以覆盖onBackPressed()

  override fun onBackPressed() {
    if (findNavController(R.id.main_nav_host).currentDestination?.id != R.id.next_dest)
      super.onBackPressed()
    }
  }

对不起,我的英语