Как переместить пункт назначения поверх задней стопкиAndroid

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

Сообщение Anonymous »

Я использую Compose Navigation, мое приложение для Android имеет 4 экрана, на каждом экране есть нижняя панель навигации для перехода к другим экранам:
  • экран A (главный экран, имеет 3 кнопки для перехода к B, C и D)
  • экран B (имеет 3 кнопки для перехода к A, C и D)
  • экран C (имеет 3 кнопки для перехода к A, B и D)
  • экран D (имеет 3 кнопки для перехода к A, B и C)
Если, например, мой текущий задний стек A > B > C > D и я хочу перейти к экрану B, как я могу переместить экран B вверх? заднего стека без удаления других экранов?
Задний стек должен стать A > C > D > B. И когда пользователь переходит к экрану A, задний стек очищается. Когда пользователь нажимает кнопку «Назад», текущий экран выскакивает.
Я думал, что launchSingleTop = true решит эту проблему, но на самом деле это просто гарантирует отсутствие повторяющиеся пункты назначения рядом друг с другом.
Это мой текущий код на экране A для перехода к другим экранам:

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

composable {
val lifecycleOwner = LocalLifecycleOwner.current
ScreenA(
onNavigate = {
val currentState = lifecycleOwner.lifecycle.currentState
if (currentState.isAtLeast(Lifecycle.State.RESUMED)) {
navController.navigate(route = it.route) {
launchSingleTop = true
}
}
},
onCloseApp = {
if (context is Activity) {
context.finish()
}
}
)
}
А это мой текущий код на экране B (так же, как экраны C и D) для перехода к другим экранам:

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

composable {
val lifecycleOwner = LocalLifecycleOwner.current
ScreenB(
onNavigate = {
val currentState = lifecycleOwner.lifecycle.currentState
if (currentState.isAtLeast(Lifecycle.State.RESUMED)) {
when (it.route) {
Route.ScreenA -> {
navController.navigate(route = Route.ScreenA) {
launchSingleTop = true

// to remove all screens from the back stack except screenA
popUpTo(Route.ScreenA) { inclusive = false }
}
}
else -> {
navController.navigate(route = it.route) {
launchSingleTop = true
}
}
}
}
},
onNavigateBack = {
val currentState = lifecycleOwner.lifecycle.currentState
if (currentState.isAtLeast(Lifecycle.State.RESUMED)) {
navController.popBackStack()
}
}
)
}
Заранее спасибо.


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

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

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

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

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

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

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