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

时间:2019-07-23 20:52:16

标签: android android-fragments kotlin android-navigation android-architecture-navigation

当我使用新的Navigation Components从一个Fragment导航到另一个Fragment时,我可以使用后续代码成功完成此操作。

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

现在,如果我使用以下方法从目标Fragment弹出后退堆栈

findNavController().popBackStack()

启动Fragments的Fragment会再次重新创建自己,但是状态没有保存好,我一直在四处看看如何解决它,但是我真的不知道是否实际上如何执行.add函数与导航组件中的navigate()

enter image description here

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

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

反正导航组件也要这样做吗?

我也读过此Navigation Architecture Fragment Reload Problem,但不清楚应如何解决。

1 个答案:

答案 0 :(得分:1)

片段从后退堆栈返回时会自动恢复其保存状态:在没有导航的情况下也是如此。似乎问题出在您的片段编码方式上。

您可以通过打开“不保留活动”,单击“主页”按钮,然后返回到您的应用程序,查看Fragment是否存在问题,以确认Fragment是否存在问题。您还可以测试可以正确处理配置更改(即旋转设备)的情况-同样,您应该能够准确地恢复到原来的状态。如果您同时处理了这两种情况,那么它在导航中也将非常有用。