导航到可组合项而不将其添加到后台

问题描述 投票:0回答:2

我正在使用 Compose Destinations 库,我不明白应该做什么才能避免将目的地添加到后台。

说明:用户导航 Screen1 -> Screen2 -> Screen3,然后返回(通过按按钮或后退手势)并进入 Screen1,因为 Screen2 不在返回堆栈中。屏幕 1 <- ... <- Screen3

我在文档中搜索了类似的内容:

navigator.navigate(SecondScreenDestination) {
    addToBackStack = false
}

但没有这样的事!

我尝试使用popUp函数来实现我的目标,但我没有找到解决方案。我真的需要帮助。

android android-jetpack-compose jetpack-compose-navigation
2个回答
5
投票

当您调用

navigate()
时,您可以将该新目的地添加到返回堆栈中。这意味着当您
navigate
到您的
SecondScreen
时,您的后堆栈将变为:

FirstScreen -> SecondScreen

如果您想导航到

ThirdScreen
从返回堆栈中删除
SecondScreen
,这正是
popUpTo
根据 Navigation Compose 文档所做的事情

navigator.navigate(ThirdScreenDestination) {
    popUpTo(SecondScreenDestination.route) {
        inclusive = true
    }
}

因此,作为这个单一原子操作的一部分,您要做两件事:

  1. 将每个目的地弹出到(即

    popUpTo
    部分)并包括(即
    inclusive
    部分)
    SecondScreen
    。这就是从返回堆栈中删除
    SecondScreen
    的原因。

  2. 导航到

    ThirdScreen
    ,这发生在
    popUpTo
    完成之后,从而将
    ThirdScreen
    放在返回堆栈的顶部。

因此你的最终返回堆栈是:

FirstScreen -> ThirdScreen

0
投票

这可能很旧,但我也遇到了类似的问题。 基本上,我有一个底部导航栏,其中包含项目“A”、“B”、“C”,分别对应于“屏幕 A”、“屏幕 B”、“屏幕 C”。

然后,假设“屏幕 B”有一个按钮“B1”来显示“屏幕 B1”。

现在,当我按此顺序按下选项卡/按钮时

'A' > 'B' > 'C' > 'B' > 'B1'
,我的应用程序将按预期按相同顺序显示相应的屏幕。 但是,当我反复按“返回”时,我希望我的应用程序将从
'Screen B1' > 'Screen B' > 'Screen A' > exit
开始,而不是在最终退出之前遍历返回堆栈中的每个屏幕。

© www.soinside.com 2019 - 2024. All rights reserved.