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方法的调用次数是有限的;
是离不开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
- RecyclerView和Adapter 以及ViewHolder
- RecyclerView,Adapter和ViewHolder
- 通用RecyclerView.Adapter和RecyclerView.ViewHolder
- RecyclerView的万能Adapter和ViewHolder
- RecyclerView中Adapter和ViewHolder的封装
- RecyclerView自定义基础通用Adapter和ViewHolder
- RecyclerView+RecyclerView.Adapter+RecyclerView.ViewHolder的使用
- 属于RecyclerView的万能适配器Adapter和ViewHolder
- 属于RecyclerView的万能适配器Adapter和ViewHolder
- RecyclerView的ViewHolder和Adapter的封装优化
- RecyclerView通用Adapter与ViewHolder
- CrimeListFragment完整+Adapter+ViewHolder+RecyclerView
- 自定义Adapter和ViewHolder
- Android 封装RecyclerView.Adapter,省其ViewHolder
- 偷懒新姿势,打造属于RecyclerView的万能适配器Adapter和ViewHolder
- 偷懒新姿势,打造属于RecyclerView的万能适配器Adapter和ViewHolder
- 偷懒新姿势,打造属于RecyclerView的万能适配器Adapter和ViewHolder
- 封装的viewholder和adapter
- JavaScript中的splice方法和slice方法联系与区别
- $post传输如何获得后台数据
- Linux 设置路由
- 创新实训5.22 多线程评测
- ACM比赛中如何加速c++的输入输出?如何使cin速度与scanf速度相当?什么是最快的输入输出方法?
- RecyclerView和Adapter 以及ViewHolder
- 162. Find Peak Element
- JSP注释说明
- CSS3索引
- bzoj4201 多边形序列
- log4j支持同时按日期和文件大小分割日志
- [ ] THUSC2017游记
- MFC 里面的宏意义
- BeautifulSoup和lxml的基本用法示例