【问题标题】:How to maintain the fragment state in navigation components如何在导航组件中维护片段状态
【发布时间】:2021-08-15 07:17:18
【问题描述】:
我在我的项目中使用导航组件架构。我有一个问题。
例如:我有两个 Fragment A 和 Fragment B
片段 A -> 有 50 个项目的回收站视图
Fragment B -> 在 Fragment A 的回收站视图中显示单个项目的详细信息
问题是当用户向下滚动到最后一项并单击最后一项时。这里一切正常
当用户单击最后一个项目并移动到片段 B。当他从片段 B 向后按下时。片段 A 被重新创建。我想限制在导航组件中重新创建 Fragment A。
我对这种情况感到震惊。请帮我解决这个问题。
提前致谢
【问题讨论】:
标签:
android
kotlin
android-fragments
android-architecture-navigation
【解决方案1】:
我不确定您是否可以在 Navigation 库中四处寻找以强制它保留特定的 Fragment 实例,但无论如何您都不应该这样做。您无法保证该对象将保留在内存中,尤其是当您离开应用程序并返回时。
相反,您需要设计您的应用,使其能够恢复其状态,并将一切恢复原状。许多 UI 组件已经为您执行此操作(例如,EditText 会记住用户输入的内容)。
RecyclerView 会记住它被滚动到的位置,但如果您需要为适配器获取数据,您可能需要设置这个:
adapter.stateRestorationPolicy = PREVENT_WHEN_EMPTY
这将使它推迟恢复滚动,直到您的适配器有超过零个项目(否则它只会“滚动”到顶部而您将失去位置)
如果您有任何其他需要保存的状态(例如,识别您当前正在查看的数据集,以便您知道需要获取什么)you need to persist it