RecyclerView item局部刷新优化

从早期的listview到现在的recyclerview,不可避免的都是,遇到数据变化的时候,刷新界面,listview是最笨的,只能调用 notifydatasetchange来全局刷新,如果单个item变化,却要我整个页面刷新,太糟蹋性能了。
于是recyclerview横空出世,推出了贴心的notidyItemchangenotifyitemrangeChange,瞬间让我喜爱上了,从此对recyclerview爱不释手。
不过,notidyItemchange还不是极限,比如我的单个item里面,有图片(从网络获取),有toggleButton控件,当toggleButton状态变化的时候,调用notidyItemchange,那图片资源也会跟着刷新,有没有办法只刷新togglebutton控件呢?
答案就在这里:

RecyclerView.ViewHolder viewHolder = mRecyclerView.findViewHolderForAdapterPosition(i);
            if (viewHolder != null && viewHolder instanceof ItemHolder) {
                ItemHolder itemHolder = (ItemHolder) itemHolder 
                    itemHolder.mButton.togglestate();
                }
            }

我们根据item的位置,获取到这个item对应的viewholder,根据viewholder,只刷新我们对应的控件,是不是很优雅,极致的item刷新优化。

该刷新方法在项目中亲测,效率提升非常明显,暂时没发现有什么bug

有人可能会问,如果viewholder为空,该怎么办?什么都不用办,如果viewholder为空的话,说明该item不在屏幕显示中,等滑动到显示状态的时候,recyclerview会自动调用onbindviewholder来刷新该item,你的item自然是最新的状态了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容