android - 导航架构组件 - 活动目的地和 OnNavigatedListener
问题描述
我为导航架构组件设置了这样的代码:
val navController = findNavController(R.id.main_nav_host_fragment)
nav_view.setupWithNavController(navController)
bottom_navigation.setupWithNavController(navController)
//nav_view.setNavigationItemSelectedListener(this)
navController.addOnNavigatedListener { controller, destination ->
if(destination.id == R.id.loginActivity) {
Toast.makeText(context, "Log Out navigation destination", Toast.LENGTH_LONG).show()
}
}
我在这里发现了两个问题:
选择未出现在底部导航视图上的导航抽屉菜单项会导致选择底部导航视图中的第一个菜单项。这似乎不正确(不应在此处选择任何项目)
在导航抽屉中选择菜单项并将菜单项 id 设置为活动目标(确切地说是对活动目标的操作)时,不会调用 OnNavigatedListener - 因此,我不需要拦截此操作并注销用户,而是需要将愚蠢的默认参数传递给活动目标用于在登录活动目标中注销用户的导航图。你知道为什么 OnNavigatedListener 不为 Activity Destinations 调用,而只为 Fragment Destinations 调用吗?为什么没有事件监听器 OnBeginNavigationListener 来有条件地阻止导航或添加一些副作用?
解决方案
推荐阅读
- magento - Magento 2 - 自定义样式 _listings.less 不起作用
- javascript - Android webview中错误的语言环境时间
- amazon-redshift - Redshift:主表的 DIST KEY 和 SORT KEY 的适当组合是什么?
- magento - Magento 1.9 禁用特定 ip 的插件
- session - Prestashop 1.7.x 差异 cookie
- python - Tensorflow 从 HDFS mac 读取:java.lang.NoSuchFieldError: LOG
- java - PostExecute AsyncTask 上的通知更新
- python - 卷积神经网络架构,整形误差
- angular - 从 Angular/Nativescript 读取本地 JSON 文件
- rpmbuild - rpm 规范中的 Prep 行导致 rpm 中的目录重复