Android 导航 - 导航时弹出当前片段

Android Navigation - Popping the current fragment when navigating

我有一个可以从我的应用程序中的任何位置动态导航到的片段,但是,当用户离开该片段时,不应将其添加到后台堆栈。

例如如果用户在片段 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 解决方案。

有没有什么巧妙的方法可以做到这一点?

I have tried calling the following in fragment B:

findNavController().navigate(
   resId = R.id.C, 
   navOptions = NavOptions.Builder()
       .setPopUpTo(R.id.B, inclusive = true)
       .build()
)

这个解决方案应该正常工作,我的应用程序中有一个内部错误阻止 navOptions 到达 navigate() 调用。