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