导航组件 popBackStack() 是否保留片段状态?

Does Navigation Components popBackStack() retains Fragment state?

当我使用新的导航组件从一个片段导航到另一个片段时,我可以通过以下方式成功完成:

btn_walk.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_action))

现在,如果我使用

从目标片段中弹出 backstack
findNavController().popBackStack()

启动那个 Fragments 的 Fragment 再次重新创建自己,但状态没有被保存,我一直在四处寻找如何修复它,但我真的不知道是否真的应该如何做 .add 功能与导航组件

中的 navigate()

此 gif 显示了从一个片段到另一个片段的导航,当从目标片段弹出堆栈时,它会重新创建启动该片段的片段,而不是保存它的状态。

如果我弹出返回堆栈,使用 fragmenttransaction.add() 方法确实可以使该片段的实例保持活动状态。

有什么方法可以对导航组件做同样的事情吗?

我也看过这个Navigation Architecture Fragment Reload Problem,但不清楚应该如何解决。

片段在 return 从返回堆栈中自动恢复它们保存的状态:对于我们没有导航的情况也是如此。问题似乎出在您对 Fragment 进行编码的方式上。

您可以确认这是您的 Fragment 的问题,方法是打开“不保留活动”,点击主页按钮,然后 return转到您的应用并查看 Fragment 是否完美恢复其状态.您还可以测试正确处理配置更改(即旋转设备)的情况——同样,您应该能够将状态恢复到原来的位置。如果您处理这两种情况,那么它在导航中也能很好地工作。