RecyclerView 源码分析

Recycler:

        Recycler的职责是管理那些已经废弃了的或者从RecyclerView中分离的item view用于复用。Recycler典型的用法就是当LayoutManager去获取Adapter中的某一项View的时候,如果这个View失效了,则需要重新绑定View,当复用的View是有效的话,View就会被直接被复用。有效的View如果不主动调用requestLayout,那么该View不需要重新测量就可以被复用。

Recycler几个成员变量

RecycledViewPool:RecycledViewPool让开发者可以在多个RecyclerView之间共享View。如果你想要跨RecyclerView复用View,创建一个RecycledViewPool实例,然后调用setRecycledViewPool(RecycledViewPool)方法就可以了。RecyclerView会自动创建一个RecycledViewPool的实例。有了RecycledViewPool的存在,就能很大程度上减少View的创建,提高性能。

mScrap是一个<viewType, List>的映射,mMaxScrap是一个<viewType, maxNum>的映射,我们可以调用setMaxRecycledViews方法来设置每种viewType的view容量。从源码可以看出,如果viewType类型的list的size大于制定的最大数字的话,会先从列表的末尾开始丢弃超出的部分。调用getRecycledView(int viewType)方法呢,可以将scrapHeap中的最后一项移除并返回viewType对应的List的末尾项。这里需要注意的是,因为是跨RecyclerView进行操作,所以要特别注意对于同一个RecycledViewPool,对ViewType的定义要统一,因为这里是根据viewType来取ViewHolder的。 

ViewCacheExtension:

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

推荐阅读更多精彩内容