Android——RecyclerView——Adapter完全图解,带你彻底掌握万能的适配器
1.和RecyclerView的观察关系
一个Adapter可以被多个RecyclerView观察。
那么这个观察关系是怎么建立的呢?
首先定位到RecyclerView内部维护的观察者。
private final RecyclerViewDataObserver mObserver = new RecyclerViewDataObserver();第二,找到这个观察者的注册处。
adapter.registerAdapterDataObserver(mObserver);总结一下,就是新建了一个观察者然后给Adapter注册进去。
(如果想深究,可以看我写的另一篇RecyclerView中的观察者模式的原理:
http://blog.****.net/qq_36523667/article/details/78723319)
2.onCreateViewHolder方法
需要做上述两件事情,其中view可以有两种方法来创建。
3.onBindViewHolder方法
这里左边的onBindViewHolder是我们正常的重写的方法,用来数据和控件之间绑定的。右边的方法多了一个payload参数,当他为空的时候,没什么影响,不为空的时候,就可以进行一个item的局部刷新。详细可以看http://blog.****.net/qq_36523667/article/details/78732020
4.创建一个viewHolder的全部流程
这个根方法就是获取ViewHolder的方法,一共有4个途径。
5.绑定数据的整个流程
6.Adapter中提供的一系列生命周期方法
onViewRecycled:当由Adapter创建的View被回收了,调用这个方法。并且这里可以释放holder的view中高负荷的资源(比如位图)。
onFailedToRecycleView:当由Adapter创建的View因为transient状态没有能够被回收时,调用这个方法。(那个有问题的view已经被RecyclerView移除了)
onViewAttachedToWindow:当由Adapter创建的view被添加到window的时候调用。
onViewDetachedFromWindow:与上面那个方法相反。
上述生命周期的方法存在必有它的意义,我举个例子:如果你的item里有一个imageView,里面存放着一个占资源颇大比如1.5M的bmp位图。如果你在这里重写这个方法,并且从holder中取得这个imageView比如叫mIv,你设置mIv = null释放资源,会大大提升你的RecyclerView的流畅度和稳定性。有些人可能会问,为什么好好的要释放这个资源,一会难道我们就不看这个item了吗?其实RecyclerView之所以叫RecyclerView,是因为他是Recycler为机制,ViewHolder为原材料进行重复利用的。所以你就算给了他10000个数据,他的viewholder的个数也是寥寥无几,所以他才会这么的流畅。我们这里释放资源,一会复用的时候还是要释放资源的,只不过你带着这个资源更久,带着他进行了更多的操作,给自己增加了巨大的负担。
7.还提供的注册和取消注册观察者的方法。
public void registerAdapterDataObserver(AdapterDataObserver observer) { mObservable.registerObserver(observer); } public void unregisterAdapterDataObserver(AdapterDataObserver observer) { mObservable.unregisterObserver(observer); }
8.当RecyclerView开始、停止观察这个Adapter时调用的方法
public void onAttachedToRecyclerView(RecyclerView recyclerView) { } public void onDetachedFromRecyclerView(RecyclerView recyclerView) { }
9.一系列通知被观察者的方法
notify...