【发布时间】:2021-08-08 04:09:07
【问题描述】:
我的 Android 应用中有一个 Fragment,它有一个 RecyclerView,我想恢复用户上次打开应用时的 RecyclerView。
在我的Fragment 中,我有以下代码块用于保存和恢复RecyclerView。
private val LIST_STATE_KEY = "recycler_state"
private var recyclerViewState : Parcelable? = null
private lateinit var recyclerView: RecyclerView
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putParcelable(LIST_STATE_KEY, recyclerView.layoutManager?.onSaveInstanceState())
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
recyclerView = rootView.findViewById(R.id.recycler_view)
if (savedInstanceState != null) {
recyclerViewState = savedInstanceState?.getParcelable(LIST_STATE_KEY)
}
}
override fun onResume() {
super.onResume()
if (recyclerViewState != null) {
recyclerView.layoutManager?.onRestoreInstanceState(recyclerViewState)
recyclerView.adapter?.notifyDataSetChanged()
}
}
我现在遇到的问题是当我第一次打开应用程序时,我填充了RecyclerView,关闭了应用程序,再次打开它,当我转到那个特定的片段时,RecyclerView 是空的。我在这里做错了什么?为什么我的应用没有保存之前关闭之前的RecyclerView 数据,并在应用再次打开时恢复它保存到RecyclerView 的数据?
【问题讨论】:
-
onSaveInstanceState用于在配置发生变化时保存数据,例如旋转设备。当您关闭应用程序并再次启动它时,此数据将丢失。您可能需要使用其他方法来保存数据,例如SharedPreferences或DataBase以实现您的目标。
标签: android kotlin android-fragments android-recyclerview