RecyclerView和Adapter 以及ViewHolder

本文深入解析了RecyclerView的工作原理,包括Adapter的实现方式以及ViewHolder的复用机制。通过详细的实验记录,阐述了onCreateViewHolder和onBindViewHolder两个核心方法的调用规律。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要使用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方法的调用次数是有限的;


    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值