登录 - 导航架构组件

7
我使用 Android 导航架构组件为 LoginFragment 实现了条件式导航。但我现在面临的问题是:当用户未登录时,我想要隐藏工具栏上的返回按钮,并禁用任何应用内导航。
我希望可以采用单 Activity 方案实现此功能,其中 Activity 配置应用内导航 UI 和 navController,就像 Android Sunflower Demo 中所示,而所有导航目的地都是 Fragments。
我按照以下链接中描述的方式来实现条件式导航: Navigation Architecture Component - 登录界面 请问,如何通过 Navigation Architecture Component 正确实现在登录界面上隐藏导航和返回按钮?
2个回答

5

我不确定你所说的隐藏导航具体是什么意思,但我会假设你是指隐藏抽屉布局。要隐藏向上按钮并锁定抽屉,请在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)


2
我的方法是将登录页面添加到根集合中。"最初的回答"
    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()


注:Original Answer翻译成"最初的回答"
  override fun onBackPressed() {
    if (findNavController(R.id.main_nav_host).currentDestination?.id != R.id.next_dest)
      super.onBackPressed()
    }
  }

抱歉我的英语不好。
最初的回答

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接