Android backstack碎片和数据保存

Android backstack fragments and data saving

我已经为这个问题苦苦挣扎了将近一个星期,这基本上是一个 Backstack 问题,我还没有找到最佳解决方案。我正在做一个流程是这样的项目:

Activity (Fragment_A -> Fragment_B -> Fragment_C -> Fragment_A)

我正在 Fragment_A 上设置一个 DatePicker 和一个 TimePicker,我有 2 个 TextViews 将用户重定向到 Fragment_B。我从 Fragment_B 发送一些数据到 Fragment_C,后者转换数据并将其发送回 Fragment_A

问题是,据我所知,当返回 Fragment_A 时,它会出现一个新实例,而不是旧实例,所以我的数据丢失了。我现在用 sharedPreferences 解决了问题,但对于解决方案来说似乎太复杂了。我试过自定义 beginTransaction()Navigation component 但结果并不好。

我很接近,当从 Fragment_CFragment_A 时,新实例在旧实例之上,在 onBackPressed 它弹出新实例,并向我展示旧的,但我该如何解决,这样我就不需要按后退按钮了?我试图发送一个布尔值,所以如果它是一个新实例弹出它,但我猜它弹出旧实例,因为当我按下时,它只是退出 Activity 而不是弹出新实例。

感谢任何帮助!

Activity 范围内的 ViewModel 将使子 Fragments 之间的数据共享更加容易。您的 Fragments 观察 ViewModel 中的数据,因此您甚至不必担心传递数据。使用导航组件,您可以使用 popUpTopopUpToInclusiveFragments B 和 C 从返回堆栈中弹出,只留下 Fragment A.

如果您不熟悉这些概念,这门免费课程很好地涵盖了所有这些概念:

https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012