RecyclerView 源码分析

2018-03-25  本文已影响11人  第一号伤心人

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:

上一篇下一篇

猜你喜欢

热点阅读