首页 > 解决方案 > 导航架构组件 - 活动目的地和 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()
            }
        }

我在这里发现了两个问题:

  1. 选择未出现在底部导航视图上的导航抽屉菜单项会导致选择底部导航视图中的第一个菜单项。这似乎不正确(不应在此处选择任何项目)

  2. 在导航抽屉中选择菜单项并将菜单项 id 设置为活动目标(确切地说是对活动目标的操作)时,不会调用 OnNavigatedListener - 因此,我不需要拦截此操作并注销用户,而是需要将愚蠢的默认参数传递给活动目标用于在登录活动目标中注销用户的导航图。你知道为什么 OnNavigatedListener 不为 Activity Destinations 调用,而只为 Fragment Destinations 调用吗?为什么没有事件监听器 OnBeginNavigationListener 来有条件地阻止导航或添加一些副作用?

标签: androidkotlinnavigation-drawerandroid-navigation

解决方案


推荐阅读