组合导航:如何避免在导航出当前目的地后将其添加到后台队列?
Compose navigation: How to avoid to add the current destination to the back queue once you navigate out of it?
用例如下:
- 我有一个已经有几个目的地的后排。
? -> ... -> ?
- 显示了一个新目标,我们称它为 Foo 屏幕,目前位于顶部。
? -> ... -> ? -> F
- 我想从 Foo 屏幕导航到新的 Bar 屏幕,但是根据特定情况,当导航返回时我想返回 Foo 屏幕或跳过 Foo 屏幕直接转到上一个队列中的屏幕。
if (skipFoo)
? -> ... -> ? -> B
else
? -> ... -> ? -> F -> B
这可以使用 androidx.navigation
中的 NavOptionsBuilder
实现吗?
我知道我可以使用 popUpTo(0) { inclusive = true }
从堆栈中删除除新目的地以外的所有内容,但我只是想防止在我导航出当前屏幕时添加当前屏幕,并且仅当满足某个条件。
此外,目的地堆栈的内容是动态的(可以随时添加 Foo 屏幕)所以我不能简单地用固定目的地硬编码 popUpToId
,因为我不知道堆栈中 Foo 屏幕之前的目的地是什么。
可以使用 popUpTo
:
navController.navigate(Screens.Bar.route) {
popUpTo(Screens.Foo.route) {
inclusive = true
}
}
用例如下:
- 我有一个已经有几个目的地的后排。
? -> ... -> ?
- 显示了一个新目标,我们称它为 Foo 屏幕,目前位于顶部。
? -> ... -> ? -> F
- 我想从 Foo 屏幕导航到新的 Bar 屏幕,但是根据特定情况,当导航返回时我想返回 Foo 屏幕或跳过 Foo 屏幕直接转到上一个队列中的屏幕。
if (skipFoo)
? -> ... -> ? -> B
else
? -> ... -> ? -> F -> B
这可以使用 androidx.navigation
中的 NavOptionsBuilder
实现吗?
我知道我可以使用 popUpTo(0) { inclusive = true }
从堆栈中删除除新目的地以外的所有内容,但我只是想防止在我导航出当前屏幕时添加当前屏幕,并且仅当满足某个条件。
此外,目的地堆栈的内容是动态的(可以随时添加 Foo 屏幕)所以我不能简单地用固定目的地硬编码 popUpToId
,因为我不知道堆栈中 Foo 屏幕之前的目的地是什么。
可以使用 popUpTo
:
navController.navigate(Screens.Bar.route) {
popUpTo(Screens.Foo.route) {
inclusive = true
}
}