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 - 导航时弹出当前片段的主要内容,如果未能解决你的问题,请参考以下文章

Android Navigation 组件在图表之间导航

react-navigation android 导航标题居中

Android Jetpack导航组件——Navigation的使用

Android Drawer - 使用 Navigation.findNavController() 导航到多个片段

Android Jetpack的导航组件(Navigation组件)的使用

踩坑!Android Jetpack组件间库之Navigation