RecyclerView和Adapter 以及ViewHolder

来源:互联网 发布:2016年西部决赛数据 编辑:程序博客网 时间:2024/05/20 12:46
要使用RecyclerView
是离不开adapter和ViewHolder的。
RecyclerView :负责回收再利用以及定位;
Adapter :负责创建ViewHolder 以及对ViewHolder的实例进行赋值;
ViewHolder :负责 容纳视图;


这里要要重点对Adapter进行说明:
要使用Adapter就要重写其一下三个方法:
1.onCreateViewHolder :完成创建必要的ViewHolder (注意是 必要 的ViewHolder)
2.onBindViewHolder :完成绑定ViewHolder 以及对其赋值;
3.getItemCount :获取ITem的总数;


接下来解释一下 什么叫必要的ViewHolder?


在android权威开发指南中P160有这么一句话:
    一旦创建了够用的ViewHolder,RecyclerView就会停止调用createViewHolder方法;
这里的够用的和必要的应该表达的是同一种信息;
    然后我做了一些测试: 让RecyclerView显示一个列表;
    在屏幕中最后一次显示12个列表,发现RecyclerVIew一开始就会调用12次OnCreateHolder方法;
    然后我不断的滑动RecycleView控件,RecyclerView不断的滚动,但是OnCreateHolder方法并不是
一直不断的被调用,而是从开始到结束最后调用15次;因此,我得出结论OnCreateHolder方法调用的次数
是和屏幕下显示的列表的数目是有关系的,并不是和Adapter中一共有多少个ViewHolder关联的;
    说了OnCreateViewHolder接着说OnBindViewHolder;
    在android权威开发指南中P160有这么一句话:
     相对于OnBindViewHolder ,createViewHolder方法调用的并不频繁;
    然后我做了些测试。
    屏幕上显示了12个列表;
    一开始时,onBindViewHolder被调用了12次;
    然后
    向下滑动RecyclerView 一个列表,onBindViewHolder被调用;
    向上滑动RecyclerView 一个列表,onBindViewHolder不被调用;
    向下滑动RecyclerView 2个列表,onBindViewHolder被调用2次;
    向上滑动RecyclerView 2个列表,onBindViewHolder不被调用;
    向下滑动RecyclerView 3个列表,onBindViewHolder被调用3次;
    向上滑动RecyclerView 3个列表,onBindViewHolder被调用1次;
    因此,我得出结论:ViewHolder的实例个数的变化时不大的,在RecyclerView滑动时,
只是通过BindViewHolder来改变的实例中的数据,具体是怎么改变的并不清楚
(比如说 显示 0-11 变到 1-12 时 ,为什么只Bind了第12个列表 ,而不是从1 到12都重新Bind,
可能内部有什么别的机制);
并且是有缓存机制的(这点从CreateViewHolder 一共调用了15次,并不是12次;
再结合onBindViewHolder的调用现象 可以看出);
    所以说onBindViewHolder 方法调用的更加频繁;而onCreateViewHolder方法的调用次数是有限的;


    
    
阅读全文
0 0