【问题标题】:Android backstack fragments and data savingAndroid backstack 片段和数据保存
【发布时间】:2021-08-21 19:57:03
【问题描述】:

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

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

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

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

我很接近,当从 Fragment_C 转到 Fragment_A 时,旧实例之上有新实例,onBackPressed 它弹出了新实例,并向我展示了旧实例,但我该如何解决我不需要按返回按钮吗?我尝试发送一个布尔值,所以如果它是一个新实例,则弹出它,但我猜它会弹出旧实例,因为当我按下返回时,它只是退出 Activity 而不是弹出新实例。

感谢任何帮助!

【问题讨论】:

    标签: android kotlin navigation stack nav


    【解决方案1】:

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

    如果您不熟悉这些概念,本免费课程将涵盖所有这些概念:

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

    【讨论】:

    • 那门课程让我进入了 Android 开发领域,我找到了 Navigation component 部分和 popUpTopopUpToInclusive 以及 sharedPreferences 作为我找到的解决方案。缺少的是活动范围的ViewModel,因为每个Fragment 都有单独的。我按照你说的实现了它,现在我可以将 2 Picker 数据保留在Fragment_A 中,我会尝试其余的,如果它可以作为一个整体解决方案,我会回来投票。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多