Android——RecyclerView——Adapter完全图解,带你彻底掌握万能的适配器

来源:互联网 发布:信广立诚贷之家数据 编辑:程序博客网 时间:2024/05/27 21:47

1.和RecyclerView的观察关系


一个Adapter可以被多个RecyclerView观察。


那么这个观察关系是怎么建立的呢?

首先定位到RecyclerView内部维护的观察者。

private final RecyclerViewDataObserver mObserver = new RecyclerViewDataObserver();
第二,找到这个观察者的注册处。

adapter.registerAdapterDataObserver(mObserver);
总结一下,就是新建了一个观察者然后给Adapter注册进去。

(如果想深究,可以看我写的另一篇RecyclerView中的观察者模式的原理:

http://blog.csdn.net/qq_36523667/article/details/78723319)


2.onCreateViewHolder方法


需要做上述两件事情,其中view可以有两种方法来创建。


3.onBindViewHolder方法


这里左边的onBindViewHolder是我们正常的重写的方法,用来数据和控件之间绑定的。右边的方法多了一个payload参数,当他为空的时候,没什么影响,不为空的时候,就可以进行一个item的局部刷新。详细可以看http://blog.csdn.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...
原创粉丝点击