gpt4 book ai didi

带有 Nav Drawer 和 Action Bar Up Navigation 的 Android 导航组件不同步

转载 作者:行者123 更新时间:2023-11-30 05:10:04 25 4
gpt4 key购买 nike

我一直在使用新的导航架构组件结合抽屉导航构建示例应用程序。

我已经创建了我的导航图,创建了我的 fragment ,并且抽屉导航在 fragment 之间显示和导航,大部分都符合预期。问题是每次我从抽屉导航中选择一个项目时,它都会将 fragment 添加到堆栈中,而不是弹出现有 fragment 并添加新 fragment 。这意味着如果我导航到一个新的 fragment ,我已经创建了一个返回堆栈并点击操作栏中的菜单按钮将最新的 fragment 从堆栈中弹出,而不是像我期望的那样打开抽屉导航。这是我的代码:

private fun configureNavigation() {

navDrawerLayout = findViewById(R.id.navigation_drawer_layout)
navView = findViewById(R.id.navigationView)

navController = Navigation.findNavController(this, R.id.nav_host_fragment)

appBarConfiguration = AppBarConfiguration(
setOf(R.id.workouts_fragment, R.id.create_workout_fragment, R.id.workout_history_fragment),
navDrawerLayout
)

NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)
NavigationUI.setupWithNavController(navView, navController)

navView.setNavigationItemSelectedListener(this)
}

override fun onSupportNavigateUp() = navController.navigateUp()

override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {

menuItem.isChecked = true
navDrawerLayout.closeDrawers()

@IdRes val destination: Int = when (menuItem.itemId) {
R.id.workouts_nav_drawer_item -> R.id.workouts_fragment
R.id.create_workout_nav_drawer_item -> R.id.create_workout_fragment
R.id.workout_history_nav_drawer_item -> R.id.workout_history_fragment
else -> {
throw IllegalArgumentException("Attempting to process an unrecognized menuItem id in the navigation drawer layout")
}
}

if (destination != currentDestination) {
currentDestination = destination

navController.navigate(destination)
}

return true
}

最佳答案

我发现要使抽屉导航、导航图和操作栏与我期望的行为完全同步,有两个要求。

第一个是AppBarConfiguration。我必须创建一个应用栏配置,其中包含一组顶级目的地(抽屉导航中的顶级 fragment )。

第二个方面是确保在 onSupportNavigateUp() 函数中将应用栏配置包含在调用中,例如:`navController.navigateUp(appBarConfiguration)。

完成这两件事后,一切都按预期工作,抽屉导航、操作栏和向上按钮都同步工作,而无需向堆栈添加不必要的 fragment 。

关于带有 Nav Drawer 和 Action Bar Up Navigation 的 Android 导航组件不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com