【发布时间】:2020-08-17 12:53:41
【问题描述】:
我遇到了一个关于使用导航组件实现抽屉布局的问题。
我已经使用 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 仅对一个菜单项执行操作。
我希望它足够清楚。如果您需要精确度,请不要犹豫。
非常感谢。
【问题讨论】:
标签: android android-architecture-navigation drawerlayout