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 — DiffUtil

移除 Item RecyclerView 时添加自定义动画

RecyclerView notifyItemRemoved 的坑

不可见的 ViewHolder 动画在 RecyclerView 中延迟

RecyclerView的Item复用导致动画不执行问题

RecyclerView 移除动画bug