【问题标题】:How to navigate to existing Fragment from BackStack?如何从 BackStack 导航到现有的 Fragment?
【发布时间】:2022-01-10 09:49:13
【问题描述】:

我有一堆片段使用单个活动作为宿主。

我的碎片是这样排列的,

Frag1 ->(按下一步)-> Frag2 ->(按下一步)-> Frag3 ->(按下一步)-> Frag4

在 Frag1 中,我有另一个按钮可以直接导航到 Frag4。

在 Frag4 中,如果我单击返回按钮,它当前将返回到 Frag1。 但在这里我希望它导航到 Frag3。

【问题讨论】:

  • 您可以通过单击按钮替换片段。
  • @Karan Mehta 感谢您的回复。在这里我想实现背压。
  • @velusamy 请用您的活动代码和导航图更新您的答案

标签: java android kotlin


【解决方案1】:

如果我正确地得到了你想要的, 您可以在主机 xml 右侧的 Pop Behavior 中使用 popUpTo,您可以在其中连接片段并导航片段并将 popUpTo 设置为您想要的片段

您可以使用此代码说明按下后退按钮时的去向:

注意:您需要将它们粘贴到片段类中

requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
            add your navigation destonation or do whatever you want 
        }

你也有其他选择。

你可以使用:

view?.findNavController().popBackStack()

最后但并非最不重要 如果你在 activty 类我的意思不是 Fragment 你可以使用这个:

override fun onBackPressed() {
do what you need
if you leave this fun empty, back button would not work any more        
}

我认为第二个选项适合你

【讨论】:

  • 感谢您的回复。在Frag4中,我尝试过这样requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { view?.findNavController()?.navigate(R.id.Frag3) //view?.findNavController()?.popBackStack() }Frag4 -> (Press Next) -> Frag2 -> (Press Next) -> Frag3 -> (Press Next) -> Frag4
  • 你不需要 view?.findNavController()?.popBackStack()。这是另一种方式。
  • 感谢您的回复。在 Frag4 中,我尝试过这样的操作,现在它的行为是这样的,Frag4 -> (Press back) -> Frag3 -> (Press back) -> Frag4 -> (Press back) -> Frag3 等等。 .
  • 你的意思是在fr4中按下返回到fr3并再次按下fr4?它会重复吗?
  • 是的,它正在循环播放。
猜你喜欢
  • 2021-09-29
  • 2013-08-20
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多