Android学习Android 其他技巧Android知识

RecyclerView item局部刷新优化

2016-12-16  本文已影响4234人  韦东锏

从早期的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自然是最新的状态了。

上一篇下一篇

猜你喜欢

热点阅读