【问题标题】:How do you return to the previous fragment when using a NavController?使用 NavController 时如何返回到上一个片段?
【发布时间】:2020-09-27 14:57:01
【问题描述】:

我正在使用导航图在 Android 上导航 Fragments。目前,我可以从一个片段转到另一个片段,然后在后按时返回。

现在我需要返回到嵌入在 FloatingActionButton 中的 OnClickListener 中的上一个 Fragment,该 FloatingActionButton 托管在托管 Fragment 的 Activity 中,而不是后按。

目前,以下代码将我一直带到开始片段:

NavController navController = NavHostFragment.findNavController(FragmentSelect.this);
            navController.setGraph(R.navigation.nav_graph, bundle);
            navController.popBackStack();

我也尝试过getActivity().onBackPressed();,这也让我回到了开始的片段。

如何回到之前的 Fragment?我正在尝试遵循本指南, Pass data to the start destination,用于将 Bundle 返回到起始目的地,但它忽略了如何返回到起始目的地。

我也想过创建另一个动作来返回开始目的地,但是后退按钮会返回到错误的片段。有没有办法阻止它?

【问题讨论】:

  • 摆脱setGraph() 电话。只需致电popBackStack()
  • 抱歉,我遗漏了一个细节。我在嵌入在托管 Fragment 的 Activity 中的 FloatingActionButton 中的 OnClickListener 中。
  • “我在一个 OnClickListener 内,它嵌入在托管 Fragment 的 Activity 中托管的 FloatingActionButton 中”——您的代码 sn-p 另有建议。无论如何,您想弹出 现有 导航图的后退堆栈,而不是创建 导航图,然后尝试弹出该导航图的后退堆栈。所以,摆脱setGraph() 调用,只需调用popBackStack()
  • Doh,这就是我复制和粘贴的结果。我删除了 setGraph 调用,它现在可以工作了!

标签: android android-fragments android-navigation-graph


【解决方案1】:

如果您只想弹出回栈,则不需要setGraph()。只需在您的NavController 上致电popBackStack()

【讨论】:

  • 现在的问题是我没有办法将 Bundle 传递到开头。
  • @JohnGlen:在需要通信的元素之间共享一个视图模型。
  • 这似乎比它需要的复杂。为了便于阅读,我试图让事情变得简单。
猜你喜欢
  • 2021-05-02
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
相关资源
最近更新 更多