Я создавал пример приложения с новым компонентом архитектуры навигации в сочетании с навигационным ящиком.
У меня есть созданный навигационный график, мои фрагменты и навигационный блок, отображающий и перемещающийся между фрагментами в основном так, как ожидалось.Проблема в том, что каждый раз, когда я выбираю элемент из панели навигации, он добавляет фрагмент в стек вместо того, чтобы вытолкнуть существующий и добавить новый.Это означает, что если я перейду к новому фрагменту, я создаю задний стек и, нажав кнопку меню на панели действий, вынимает последний фрагмент из стека, вместо того, чтобы открывать навигационный ящик, как я и ожидал.Вот мой код:
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
}