Android Compose NavController и поведение всплывающего графикаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Compose NavController и поведение всплывающего графика

Сообщение Anonymous »

Я столкнулся с проблемой при использовании навигации в Compose и хотел бы узнать логику, стоящую за ней. Чтобы достичь следующего UI
У меня есть пользовательский класс
sealed class MyDestination {
@Serializable
object HomeGraph : MyDestination()

@Serializable
object HomeA : MyDestination()

@Serializable
object HomeB : MyDestination()

@Serializable
object RegisterGraph : MyDestination()

@Serializable
object Register1 : MyDestination()

@Serializable
object Register2 : MyDestination()
}
< /code>
и следующие каркасы в MainActivity < /p>
Scaffold(
modifier = Modifier.fillMaxSize(),
bottomBar = {
MyNavBar(
switchToHomeA = {
navController.navigate(MyDestination.HomeA) {
// Pop current HomeA so User won't back to HomeA
popUpTo(
navController.currentDestination?.route ?: return@navigate
) {
inclusive = true
}
}
},
switchToHomeB = {
navController.navigate(MyDestination.HomeB) {
popUpTo(
// Pop current HomeB so User won't back to HomeB
navController.currentDestination?.route ?: return@navigate
) {
inclusive = true
}
// This will work when User enter register from HomeA, but not HomeB
launchSingleTop = true
}
}
)
},
floatingActionButton = {
MyFab(
toRegister = {
navController.navigate(MyDestination.RegisterGraph)
}
)
}
) { innerPadding ->
NavHost(
modifier = Modifier.padding(innerPadding),
navController = navController,
startDestination = MyDestination.HomeGraph
) {
navigation(
startDestination = MyDestination.HomeA
) {
composable {
Text("HomeA")
}
composable {
Text("HomeB")
}
}
navigation(
startDestination = MyDestination.Register1
) {
composable {
Button(onClick = {
navController.navigate(MyDestination.Register2)
}) {
Text("Next")
}
}
composable {
Button(onClick = {
navController.navigate(MyDestination.HomeGraph) {
// Pop all destinations from RegisterGraph
popUpTo(MyDestination.RegisterGraph) {
inclusive = true
}
}
}) {
Text("Done")
}
}
}
}
}
< /code>
Добавление следующего, чтобы я мог проверить текущий стек < /p>
LaunchedEffect(navController) {
navController.currentBackStack.collect { backStackEntries ->
Log.d(
"Stack",
"Current Stack: ${
backStackEntries.map {
it.destination.route?.substringAfterLast(".")
}
}"
)
}
}
< /code>
Пользователь должен иметь возможность переключаться между Homea и Homeb, и этот переключатель теперь должен быть сложен, короче говоря, пользователь всегда «1» возвращается от закрытия приложения, когда они дома. Вот журнал от нормального взаимодействия.
(приложение открыто)
[null, homegraph, homea]
(chlice пользователя b) Homeb]
(пользователь нажимает кнопку «Плавающее действие», «Заходит в регистр»)
[null, Homegraph, Homeb, registergraph, register1]
(gute nte home)

(Щелкни «Готово») до
Original, но здесь больше, когда пользователь входит в регистр поток на Homea (который является стартовым домохозяйством). После нажатия, выполненного в Register2, журнал будет
[null, homegraph, homea]
, что именно то, что я ожидаю. Я думаю, что это связано с запуском, и True, а Android - это Homea, а не Homegraph в стеке. Теперь, если вы прокомментируете запуск singsingletop = true, даже введите поток регистра из Homea, будут результатами
[null, homegraph, homea, homegraph, homea]
существует правильный, или Google рекомендует решить эту проблему? Или я что -то упускаю, извините
, если его трудно читать, я попробовал ... любой совет будет оценен! < /P>

Подробнее здесь: https://stackoverflow.com/questions/794 ... o-behavior
Ответить

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

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

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

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

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