【发布时间】:2021-08-08 20:45:57
【问题描述】:
我的 Android 应用中有一个 Fragment,它有一个 RecyclerView,我想保存它之前在应用关闭之前拥有的 RecyclerView 数据,并在应用关闭时恢复它保存到 RecyclerView 的数据又开了?
这是我的RecyclerView.Adapter 班级:
class RecyclerAdapter(private val recyclerList: List<RecyclerCard>, private val listener: OnRecyclerClickListener) : RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder>() {
inner class RecyclerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
val recyclerImageView: AppCompatImageView =
itemView.findViewById(R.id.recycler_picture_image_view)
val recyclerTitleView: AppCompatTextView = itemView.findViewById(R.id.recycler_title_text_view)
val recyclerScoreView: AppCompatTextView =
itemView.findViewById(R.id.recycler_score_text_view)
init {
itemView.setOnClickListener(this)
}
override fun onClick(v: View?) {
val position = adapterPosition
if (position != RecyclerView.NO_POSITION) {
listener.onRecyclerClick(position)
}
}
}
interface OnRecyclerClickListener {
fun onRecyclerClick(position: Int)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
val itemView =
LayoutInflater.from(parent.context).inflate(R.layout.recycler_card, parent, false)
return RecyclerViewHolder(itemView)
}
override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
val currentRecycler = recyclerList[position]
Glide.with(holder.itemView.context)
.load(currentRecycler.recyclerImage)
.apply(RequestOptions.skipMemoryCacheOf(true))
.apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE))
.into(holder.recyclerImageView)
holder.recyclerTitleView.text = currentRecycler.recyclerTitle
holder.recyclerScoreView.text = currentRecycler.recyclerScore
}
override fun getItemCount(): Int = recyclerList.size
}
这是我的Fragment,填充了RecyclerView。请注意,我删除了很多与我的问题无关的代码,但这是要使用的主要代码:
class Main : Fragment(), RecyclerAdapter.OnRecyclerClickListener {
private lateinit var mainRecyclerView: RecyclerView
private var mainList = ArrayList<RecyclerCard>()
private var adapter = RecyclerAdapter(mainList, this)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mainRecyclerView = rootView.findViewById(R.id.main_recycler_view)
GlobalScope.launch(Dispatchers.IO) {
val item = RecyclerCard(
string1,
string2,
score,
string3
)
mainList += item
this@Main.requireActivity()
.runOnUiThread(kotlinx.coroutines.Runnable {
run {
mainRecyclerView.adapter = adapter
mainRecyclerView.layoutManager =
LinearLayoutManager(this@Main.requireContext())
mainRecyclerView.setHasFixedSize(true)
}
})
}
}
override fun onRecyclerClick(position: Int) {
// Complete an action when the user clicks on a row item
}
}
因此,RecyclerView 的所有功能都如我所愿,我现在要做的是在应用程序关闭之前使用ViewModel 和LiveData 将数据保存在RecyclerView 中,然后恢复当应用程序再次打开时,数据返回到RecyclerView。我怎么做?我在重构现有代码以使其正常工作时遇到了麻烦。我想用ViewModel 和LiveData 来做到这一点,因为我相信这是我想要实现的最佳实践。
【问题讨论】:
标签: android kotlin android-recyclerview android-livedata android-viewmodel