繁体   English   中英

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

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

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

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

我已经尝试过这里的方法: https://stackoverflow.com/a/54086631/10933532但我无法按照描述创建NavArgument NavArgument class 没有给我 public Builder()构造函数。

我在 mainactivity onCreate 中使用导航 controller 设置我的导航视图,如下所示:

NavigationUI.setupWithNavController(navigationView,navController);

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

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
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM