RecyclerView 处理动画不频繁更新
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RecyclerView 处理动画不频繁更新相关的知识,希望对你有一定的参考价值。
ChatGPT给了三种方案
我用了第一种
override fun onBindViewHolder(
holder: RecyclerView.ViewHolder, position: Int, payloads: MutableList<Any>
)
when (getItemViewType(position))
ITEM_VIEW_TYPE ->
val item = mModel.mListDatas[position] as ReadAfterBean
if (holder !is ReadAfterSentenceHolder)
return
holder.binding.apply
for (payload in payloads)
when (payload)
in listOf("localReadsSentenceData") -> updateSentenceView(
item.localReadsSentenceData, this, position
)
in listOf("recordStatus") -> updateChangeStatus(
item.recordStatus, this, position
)
in listOf("localDialogActionData") -> updateActionData(
item.localDialogActionData, this, position
)
in listOf("playingData") -> updateSentencePlayingState(
item.playingData, this
)
BOTTOM_STATUS_VIEW_TYPE ->
else -> throw IllegalArgumentException("Invalid view type")
super.onBindViewHolder(holder, position, payloads)
重写 holder: RecyclerView.ViewHolder, position: Int, payloads: MutableList<Any>
三个参数的方案
payloads 这个 我从未用过。但是是真好用
这个方法重写后不要删除原来的 onBindViewHolder 还是照常设置数据,
当遇到频繁要刷新的数据时。
在需要频繁更新的数据中去设置。
if (mModel.mListDatas[position] is ReadAfterBean)
val readAfterBean = mModel.mListDatas[position] as ReadAfterBean
readAfterBean.recordStatus = data
notifyItemChanged(position, "recordStatus")
这样的数据不会频繁的干扰动画同UI的刷新。
以上是关于RecyclerView 处理动画不频繁更新的主要内容,如果未能解决你的问题,请参考以下文章
RecyclerView notifyItemRemoved 的坑