【问题标题】:Android Navigation ComponentsAndroid 导航组件
【发布时间】:2025-12-03 18:25:01
【问题描述】:

我在我的应用程序中添加了 Android 新导航组件并创建了 navGraph 并添加了一些片段作为目的地。我发现每次我导航到目的地之前的目的地(片段)都开始重新启动。而我上一个目的地(片段)的最后状态已经丢失。有什么选择可以保留这个吗? 因为我已经在片段中使用了retainInstance

【问题讨论】:

  • 它没有重新启动,它被替换。这和你做replace().addToBackStack() 的时候一样。所以 Fragment 的状态应该是它原来的样子,但是视图是重新创建的。
  • @EpicPandaForce 谢谢,那么我如何维护用户向下滚动的 recyclerview 视图的状态?
  • RecyclerView 的 LayoutManager 应该持久化并恢复其状态,也就是存储滚动位置;这意味着您不需要仅仅因为您导航回来就重新加载数据(尤其是不要将空列表设置为初始化)。

标签: android kotlin android-architecture-navigation android-jetpack-navigation


【解决方案1】:

我一直在项目中使用带有片段的导航组件,我发现保存片段状态的最简单方法是使用视图模型组件: https://developer.android.com/topic/libraries/architecture/viewmodel?gclid=EAIaIQobChMI442XtIuR4wIVhuiaCh0uGAFZEAAYASAAEgIRIfD_BwE

我一直在使用 MVP 架构,并在我的模型中扩展了视图模型。 这样,只要您的活动没有被破坏,模型实例就会被保存,并且您可以在片段重新加载时访问它,因此它的所有参数仍然存在,因此您可以使用模型中保存的值重新初始化片段。

【讨论】: