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_C
到 Fragment_A
时,新实例在旧实例之上,在 onBackPressed
它弹出新实例,并向我展示旧的,但我该如何解决,这样我就不需要按后退按钮了?我试图发送一个布尔值,所以如果它是一个新实例弹出它,但我猜它弹出旧实例,因为当我按下时,它只是退出 Activity 而不是弹出新实例。
感谢任何帮助!
Activity 范围内的 ViewModel
将使子 Fragments
之间的数据共享更加容易。您的 Fragments
观察 ViewModel
中的数据,因此您甚至不必担心传递数据。使用导航组件,您可以使用 popUpTo
和 popUpToInclusive
将 Fragments
B 和 C 从返回堆栈中弹出,只留下 Fragment
A.
如果您不熟悉这些概念,这门免费课程很好地涵盖了所有这些概念:
https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012
我已经为这个问题苦苦挣扎了将近一个星期,这基本上是一个 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_C
到 Fragment_A
时,新实例在旧实例之上,在 onBackPressed
它弹出新实例,并向我展示旧的,但我该如何解决,这样我就不需要按后退按钮了?我试图发送一个布尔值,所以如果它是一个新实例弹出它,但我猜它弹出旧实例,因为当我按下时,它只是退出 Activity 而不是弹出新实例。
感谢任何帮助!
Activity 范围内的 ViewModel
将使子 Fragments
之间的数据共享更加容易。您的 Fragments
观察 ViewModel
中的数据,因此您甚至不必担心传递数据。使用导航组件,您可以使用 popUpTo
和 popUpToInclusive
将 Fragments
B 和 C 从返回堆栈中弹出,只留下 Fragment
A.
如果您不熟悉这些概念,这门免费课程很好地涵盖了所有这些概念:
https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012