【发布时间】:2021-12-23 16:58:15
【问题描述】:
我有一个可以从我的应用程序中的任何位置动态导航到的片段,但是,当用户离开这个片段时,它不应该被添加到后台堆栈中。
例如如果用户在片段 A 并导航到该片段 (B),然后导航到片段 C,当他们点击返回时,他们应该到达片段 A 而不是片段 B。
我尝试在片段 B 中调用以下内容:
findNavController().navigate(
resId = R.id.C,
navOptions = NavOptions.Builder()
.setPopUpTo(R.id.B, inclusive = true)
.build()
)
但是,这不起作用。此外,我不能从片段 B 中调用它:
findNavController().navigate(
resId = R.id.C,
navOptions = NavOptions.Builder()
.setPopUpTo(R.id.A, inclusive = false) // this line is different
.build()
)
因为 B 不知道它的前任是什么。
或者,我不能在 C 中调用类似这样的东西来返回导航:
findNavController().popBackStack(R.id.A, inclusive = false)
或类似 C 中的片段创建:
findNavController().popBackStack()
因为 C 不一定知道它的前任是什么时候。
为了使这更加困难,由于我的应用程序内部的原因,我不能在片段 B 中调用 navigateBack() 然后再 navigate()。
我相信如果我要检查后台堆栈并添加一些动态调用,这可能是可能的,但是,这感觉像是一个 hacky 解决方案。
有什么巧妙的方法可以做到这一点吗?
【问题讨论】:
标签: android android-fragments android-navigation android-jetpack-navigation