Search code examples
androidnavigation-drawerandroid-jetpackandroid-architecture-navigationandroid-jetpack-navigation

Jetpack Navigation NavigationDrawer, Custom action for menu item


I'm using jetpack navigation with NavigationDrawer in my app.

<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>

In Activity/onCreate

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

All menu items connected to fragments except one. navItemLogout has specific action instead of direction.
adding listener,

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

seems to override the previous setup. So is the only way to proper way to solve my case is to use setNavigationItemSelectedListener for all drawer items interaction? Or is this possible to solve this with navController setup?


Solution

  • You have to call NavigationUI.onNavDestinationSelected() to trigger the default listener.
    Something like:

     navigationView.setNavigationItemSelectedListener {
           if (it.itemId==R.id.navItemLogout){
                mainActivityViewModel.repository.logout()
                true
            }
    
            NavigationUI.onNavDestinationSelected(it, navController)
            drawerLayout.closeDrawer(GravityCompat.START)
            true
        }