当我使用新的导航组件从一个 fragment 导航到另一个 fragment 时,我可以通过以下方式成功完成:
btn_walk.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_action))
现在,如果我使用
从目标 Fragment 中弹出 backstackfindNavController().popBackStack()
启动那个 fragment 的 fragment 再次重新创建自己,但状态没有被保存,我一直在四处寻找如何修复它,但我真的不知道是否实际上如何做一个 。使用导航组件中的
函数navigate()
添加
此 gif 显示了从一个 fragment 到另一个 fragment 的导航,当从目标 fragment 弹出堆栈时,它会重新创建启动该 fragment 的 fragment ,而不是保存它的状态。
如果我弹出返回堆栈,使用 fragmenttransaction.add()
方法确实可以使该 fragment 的实例保持 Activity 状态。
有什么方法可以对导航组件做同样的事情吗?
我也读过这个Navigation Architecture Fragment Reload Problem但不清楚应该如何解决。
最佳答案
fragment 从返回堆栈返回时会自动恢复其保存的状态:对于我们的无导航来说也是如此。问题似乎出在您对 Fragment 进行编码的方式上。
您可以确认这是您的 Fragment 的问题,方法是打开“不保留 Activity ”,点击主页按钮,然后返回您的应用并查看 Fragment 是否完美恢复其状态。您还可以测试正确处理配置更改(即旋转设备)的情况——同样,您应该能够将状态恢复到原来的位置。如果您处理这两种情况,那么它在导航中也能很好地工作。
关于android - 导航组件 popBackStack() 是否保留 fragment 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57172029/