Android Navigation - 导航时弹出当前片段
Posted
技术标签:
【中文标题】Android Navigation - 导航时弹出当前片段【英文标题】:Android Navigation - Popping the current fragment when navigating 【发布时间】: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 解决方案。
有什么巧妙的方法可以做到这一点吗?
【问题讨论】:
【参考方案1】:我尝试在片段 B 中调用以下内容:
findNavController().navigate( resId = R.id.C, navOptions = NavOptions.Builder() .setPopUpTo(R.id.B, inclusive = true) .build() )
这个解决方案应该正常工作,我的应用程序中有一个内部错误阻止 navOptions 到达 navigate() 调用。
【讨论】:
以上是关于Android Navigation - 导航时弹出当前片段的主要内容,如果未能解决你的问题,请参考以下文章
react-navigation android 导航标题居中
Android Jetpack导航组件——Navigation的使用
Android Drawer - 使用 Navigation.findNavController() 导航到多个片段