android - 导航组件 popBackStack() 是否保留 fragment 状态?

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

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

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

现在,如果我使用

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

启动那个 fragment 的 fragment 再次重新创建自己,但状态没有被保存,我一直在四处寻找如何修复它,但我真的不知道是否实际上如何做一个 。使用导航组件中的 navigate() 添加 函数

enter image description here

此 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/

相关文章:

java - Android 中的多分辨率?

android - 我如何用 setRetainInstance(true) 破坏 fragment 并将它们添加到后台堆栈?

spring-security - 如何创建一个数据类实现 Spring Security 特定的 UserDetails

android - Dagger Hilt 没有在测试中注入(inject)

java - 合并两个自定义对象类型的 ArrayList

android - 无法从 Android 5.0.2 中的 ACTION_OPEN_DOCUMENT Intent 获取音频文件扩展名

android - 如何在应用程序中访问 c​​om.android.internal.R.bool?

android - 关闭 fragment 中的对话框将删除 fragment 本身

android - 在 Android 中以编程方式添加 TableRow

android - Unresolved reference KClass 试图在 Android 中使用 DBFlow 和 Kotlin