使用导航组件时,如何在运行时为通过导航视图菜单访问的目的地设置参数?

When using Navigation Component, how do I set an argument at runtime for a destination accessed via navigation view menu?

我有一个带菜单项的导航视图的导航抽屉,我正在使用导航组件。当单击导航视图中的某个菜单项时,如何在运行时为目标指定参数?

我知道我可以在导航图中设置默认参数,但这不是我想要做的,因为传递的参数需要在运行时决定。对于工具栏菜单项,我没有问题,因为我可以覆盖 onOptionsItemSelected。我的问题特别与导航视图中的菜单项有关。

我已经尝试过这里的方法: 但我无法按照描述创建 NavArgumentNavArgument class 没有给我 public Builder() 构造函数。

我在 mainactivity onCreate 中使用导航控制器设置导航视图,如下所示:

NavigationUI.setupWithNavController(navigationView,navController);

我也这样做是为了使用导航控制器设置我的工具栏:

NavigationUI.setupWithNavController(collapsingToolbarLayout,toolbar,navController,appBarConfiguration);

有人能给我指出正确的方向吗?

您可以使用自定义 NavigationItemSelectedListener

请注意,因为这样您将删除原始侦听器。您必须调用 NavigationUI.onNavDestinationSelected() 才能触发默认行为。

navigationView.setNavigationItemSelectedListener {
        when (it.itemId) {
            R.id.xxxxx -> {
                // handle click
                true
            }
         }
         //Call the original listener
         NavigationUI.onNavDestinationSelected(it, navController)
         drawerLayout.closeDrawer(GravityCompat.START)
         true
    }