我有一个与Drawer Layout和Navigation组件实现相关的问题。
我使用了Android Studio中包含的导航抽屉活动创建了抽屉布局。
实际上,如果菜单项的目的是更改在导航XML中定义的片段或活动(如屏幕截图上的程序、歌曲、设置等),那么一切都很好。
然而,我也希望在“注销”菜单项上执行注销操作,而不启动另一个片段或活动:
但我的问题是:使用该方法后,之前可以正常工作的所有其他项目(更改片段)都不能正常工作,因为它调用了 NavigationItemSelectedListener,在这种情况下不起作用。
我使用了Android Studio中包含的导航抽屉活动创建了抽屉布局。
实际上,如果菜单项的目的是更改在导航XML中定义的片段或活动(如屏幕截图上的程序、歌曲、设置等),那么一切都很好。
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
val navView: NavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
appBarConfiguration = AppBarConfiguration(
setOf(
R.id.nav_user_programs_list,
R.id.nav_user_songs_list,
R.id.nav_user_settings,
R.id.nav_user_legal_notices,
R.id.nav_games
), drawerLayout
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
然而,我也希望在“注销”菜单项上执行注销操作,而不启动另一个片段或活动:
我是这样做的:
navView.setNavigationItemSelectedListener {
if (it.itemId == R.id.nav_logout) {
logoutUser()
}
true
}
但我的问题是:使用该方法后,之前可以正常工作的所有其他项目(更改片段)都不能正常工作,因为它调用了 NavigationItemSelectedListener,在这种情况下不起作用。
有没有解决办法将两种方法结合起来?:
- 使用Android Studio的默认抽屉布局更改片段
- 仅在一个菜单项上执行操作的使用 NavigationItemSelectedListener。
希望这足够清楚。 如果需要澄清,请不要犹豫。
非常感谢。