Mic*_*bro 3 android navigation-drawer android-navigation android-architecture-components
我想让大部分菜单项由导航组件的控制器处理,但我也想单独处理一个“注销”菜单项,如下所示:
val navController = findNavController(R.id.nav_host_fragment)
nav_view.setNavigationItemSelectedListener { item ->
when(item.itemId) {
R.id.logout_menu_item -> {
Toast.makeText(context, "Logut Menu Item Touched", Toast.LENGTH_LONG).show()
true
}
else -> false
}
}
nav_view.setupWithNavController(navController)
bottom_navigation.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用,以及如何解决此问题?
小智 5
我不确定目前是否有合适的方法来执行此操作,但是您始终可以不使用该setupWithNavController方法。
我碰到了这个问题,以及和,作为一个测试,我的移动电话来setNavigationItemSelectedListener向后调用setupWithNavController,并和我签署了导航代码在运行,但导航的其余部分不是。我认为这意味着该navigationListener是在后续调用覆盖setNavigationItemSelectedListener和setupWithNavController通话setNavigationItemSelectedListener在内部。
我试图在 google 源代码中验证这一点,但无法轻松找到 repo。
我通过不打电话setupWithNavController而是做类似的事情来解决这个问题:
navigationDrawer?.setNavigationItemSelectedListener { menuItem ->
if (menuItem.itemId == R.id.action_sign_out) {
// sign out logic
return@setNavigationItemSelectedListener true
}
val result = menuItem.onNavDestinationSelected(navigationController)
drawerLayout?.closeDrawers()
result
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
526 次 |
| 最近记录: |