下面我准备看一下Recycler的机制
在RecelyViw 里面可以看到实例话 recelyview创建了Recycler现在知道了 Recycler的初始值,在介绍一下Recycler的核心的几个列表后续的操作都是围绕着 这几个列表进行处理。
上面可以看到Recycler持有了几个集合,咱们先从RecycledViewPool入手
图上可以看出RecycledViewPool的设置有两种一种是调用getRecycledViewPool 一种是咱们自主设置的RecycledbviewPool 进行了重置连接数操作 从RecycledViewPool了解到 主要是对mScrapHeap进行管理 咱们围绕着mScrapHeap 看一下。
图上显示一共有两个集合一个是mScrapHeap废弃的viewHoder一个是对ScrapData对象管理的集合,还是从添加数据开始
图上看到对废弃的ViewHoder添加viewhoder 根据每个getItemViewType进行判断当前类型的缓存是否已经达到上限,如果没有则添加
最后发现offsetPositionsForRemovingInvisible会调用可以看一下上一篇文章看一下这个回调,当删除,更新缓存大小,清除缓存的view调用废弃的缓存,只要有缓存操作或者有移除动作会添加,现在知道的数据来源接下来看一下删除
清除就很好理解了直接遍历了缓存的type集合然后清楚每个type下存储的viewhoder。调用也比较简单setAdapter ()
RecycledViewPool 总结
如果没有设置RecycledviewPool将会在调用getRecycledViewPool时进行创建,当更新缓存长度,删除item缓存,对缓存进行操作RecycledViewPool会里面的mScrap会根据type添加缓存ViewHodler的列表,当调用onBindeView调用factorInBindTime获取缓存的