Создание навигации: переход к месту назначения верхнего уровня при нажатии на элемент панели навигации.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Создание навигации: переход к месту назначения верхнего уровня при нажатии на элемент панели навигации.

Сообщение Anonymous »

Я использую Jetpack Compose и androidx-navigation-compose.
В целом мне нравится механизм сохранения/восстановления состояния при переключении между нижними вкладками навигации.
Однако, если я нахожусь на подробном экране определенной вкладки и снова нажимаю на вкладку, я хочу, чтобы приложение перешло к соответствующему пункту назначения верхнего уровня этой вкладки, а не ничего не делало. Как мне добиться такого поведения?
Описанное мной поведение не реализовано в Now-in-Android.
Однако раньше оно было поведением по умолчанию при настройке Bottom. Панель с навигацией Androidx – перед созданием.
Я попытался создать минимальный пример, который можно найти здесь.
Вот самая важная часть. :

Код: Выделить всё

Scaffold(
modifier = Modifier.fillMaxSize(),
bottomBar = {
NavigationBar {
bottomBarItems.forEach { item ->
val screen = item.screen
NavigationBarItem(
icon = { Icon(Icons.Filled.Favorite, contentDescription = null) },
label = { Text(item.title) },
selected = screen == currentTopLevelDestination.screen,
onClick = {
navController.navigate(screen.route) {
// Pop up to the start destination of the graph to
// avoid building up a large stack of destinations
// on the back stack as users select items
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
// Avoid multiple copies of the same destination when
// reselecting the same item
launchSingleTop = true
// Restore state when reselecting a previously selected item

restoreState = true
}
}
)
}
}

}
) { paddingValues ->
NavHost(
navController = navController,
startDestination = TopLevelDestination.HOME.route,
modifier = Modifier.padding(paddingValues)
) {
navigation(
route = TopLevelDestination.HOME.route,
startDestination = Screen.Home.route,
) {
composable(Screen.Home.route) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize(),
) {
Button(onClick = { navController.navigate(Screen.HomeDetail.route) }) {
Text("Go to Home Detail")
}
}
}
composable(Screen.HomeDetail.route) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize(),
) {
Text("Home Detail")
}
}
}
navigation(
route = TopLevelDestination.MORE.route,
startDestination = Screen.More.route,
) {
composable(Screen.More.route) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize(),
) {
Button(onClick = { navController.navigate(Screen.MoreDetail.route) }) {
Text("Go to More Detail")
}
}
}
composable(Screen.MoreDetail.route) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize(),
) {
Text("More Detail")
}
}
}
}
}

Мне нужно следующее поведение:
  • Приложение запускается на главном экране
  • Перейти к разделу «Детали главной страницы».
  • Нажмите на нижний элемент навигации «Домой».
-> Я хочу вернуться назад. на главную

Подробнее здесь: https://stackoverflow.com/questions/767 ... gation-bar
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»