Jetpack Navigation NavigationDrawer,菜单项的自定义操作

Jetpack Navigation NavigationDrawer, Custom action for menu item

我在我的应用程序中使用带有 NavigationDrawer 的 Jetpack 导航。

<group
    android:id="@+id/nav_menu">
    <item
        android:id="@+id/reportsFragment"
        android:title="@string/trip_reports"
        android:icon="@drawable/ic_nav_reports"/>
    <item
        android:id="@+id/messagesFragment"
        android:title="@string/messages"
        android:icon="@drawable/ic_nav_chat"/>
    <item
        android:id="@+id/navItemLogout"
        android:title="@string/log_out"
        android:icon="@drawable/ic_nav_logout"/>
</group>

在Activity/onCreate

  navigationView.setupWithNavController(navController)
  NavigationUI.setupWithNavController(bottomNavView, navController)

连接到片段的所有菜单项,一个除外。 navItemLogout 有具体的行动而不是方向。
添加监听器,

navigationView.setNavigationItemSelectedListener {
            if (it.itemId==R.id.navItemLogout){
                mainActivityViewModel.repository.logout()
            }
            true
        }

似乎覆盖了之前的设置。那么解决我的情况的唯一正确方法是对所有抽屉项目交互使用 setNavigationItemSelectedListener 吗?还是可以通过 navController 设置来解决这个问题?

您必须调用 NavigationUI.onNavDestinationSelected() 才能触发默认侦听器。
类似于:

 navigationView.setNavigationItemSelectedListener {
       if (it.itemId==R.id.navItemLogout){
            mainActivityViewModel.repository.logout()
            true
        }

        NavigationUI.onNavDestinationSelected(it, navController)
        drawerLayout.closeDrawer(GravityCompat.START)
        true
    }