使用导航组件时,如何在运行时为通过导航视图菜单访问的目的地设置参数?
When using Navigation Component, how do I set an argument at runtime for a destination accessed via navigation view menu?
我有一个带菜单项的导航视图的导航抽屉,我正在使用导航组件。当单击导航视图中的某个菜单项时,如何在运行时为目标指定参数?
我知道我可以在导航图中设置默认参数,但这不是我想要做的,因为传递的参数需要在运行时决定。对于工具栏菜单项,我没有问题,因为我可以覆盖 onOptionsItemSelected
。我的问题特别与导航视图中的菜单项有关。
我已经尝试过这里的方法: 但我无法按照描述创建 NavArgument
。 NavArgument
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
}
我有一个带菜单项的导航视图的导航抽屉,我正在使用导航组件。当单击导航视图中的某个菜单项时,如何在运行时为目标指定参数?
我知道我可以在导航图中设置默认参数,但这不是我想要做的,因为传递的参数需要在运行时决定。对于工具栏菜单项,我没有问题,因为我可以覆盖 onOptionsItemSelected
。我的问题特别与导航视图中的菜单项有关。
我已经尝试过这里的方法:NavArgument
。 NavArgument
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
}