当我使用新的Navigation Components从一个Fragment导航到另一个Fragment时,我可以使用后续代码成功完成此操作。
btn_walk.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_action))
现在,如果我使用以下方法从目标Fragment弹出后退堆栈
findNavController().popBackStack()
启动Fragments的Fragment会再次重新创建自己,但是状态没有保存好,我一直在四处看看如何解决它,但是我真的不知道是否实际上如何执行.add
函数与导航组件中的navigate()
此gif显示了从一个片段到另一个片段的导航,当从目标片段中弹出堆栈时,它会重新创建启动该片段的片段,而不是保存其状态。
如果我弹出后退堆栈,则使用fragmenttransaction.add()
方法确实可以使该片段的实例保持活动状态。
反正导航组件也要这样做吗?
我也读过此Navigation Architecture Fragment Reload Problem,但不清楚应如何解决。
答案 0 :(得分:1)
片段从后退堆栈返回时会自动恢复其保存状态:在没有导航的情况下也是如此。似乎问题出在您的片段编码方式上。
您可以通过打开“不保留活动”,单击“主页”按钮,然后返回到您的应用程序,查看Fragment是否存在问题,以确认Fragment是否存在问题。您还可以测试可以正确处理配置更改(即旋转设备)的情况-同样,您应该能够准确地恢复到原来的状态。如果您同时处理了这两种情况,那么它在导航中也将非常有用。