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() 调用。
我有一个可以从我的应用程序中的任何位置动态导航到的片段,但是,当用户离开该片段时,不应将其添加到后台堆栈。
例如如果用户在片段 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() 调用。