RecyclerView.Adapter适配器
RecyclerView.Adapter
,一个抽象类,并支持泛型
public static abstract class Adapter<VH extends ViewHolder> {
...
}
定义一个RecyclerAdapter继承RecyclerView.Adapter后,这个类必须重写三个方法,在重写三个方法之前,一般先要定义一个BaseViewHolder继承RecyclerView.ViewHolder,之后直接在RecyclerAdapter上指定泛型就是BaseViewHolder。
BaseViewHolder
public class BaseViewHolder extends RecyclerView.ViewHolder {
public BaseViewHolder(View itemView) {
super(itemView);
}
}
3个需要必须重写的方法:
方法1:public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
方法2:public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
方法3:public int getItemCount()
指定泛型为BaseViewHolder,方法2也会根据泛型改变为onBindeViewHolder(BaseViewHolder holder,int position)
1.onCreateViewHolder(ViewGroup parent, int viewType)创建Holder
- ViewGroup parent:可以简单理解为
item
的根ViewGroup
,item
的子控件加载在其中 - int viewType:
item
的类型,可以根据viewType
来创建不同的ViewHolder
,来加载不同的类型的item
ViewHolder
,可以根据需求的
itemType
,创建出多个
ViewHolder
。
viewType是getItemViewType(int position)方法的返回值
2.onBindViewHolder(RecyclerHolder holder, int position)绑定ViewHolder
- VH holder:就是在
onCreateViewHolder()
方法中,创建的ViewHolder
- int position:
item
对应的dataBeanList
数据源集合的postion
postion
就是adapter position
,RecycelrView
中item
的数量,就是根据dataBeanList
数据源集合的数量来创建的.
3. getItemCount()获取Item的数目
这个方法的返回值,便是RecyclerView
中实际item
的数量。有些情况下,当增加了HeaderView
或者FooterView
后,
需要注意考虑这个返回值.
4 .getItemType(int position)获取Item的类型
- int position:
item
对应的dataBeanList
数据源集合的postion
5.总结及流程
onCreateViewHolder()
为每个项目创建 ViewHolder
onBindViewHolder()
处理每个 item
getItemViewType()
在 onCreateViewHolder
前调用,返回 item
类型 getItemCount()
获取 item
总数
加载 RecyclerView
的过程如下图:
6.一些常用到方法
方法 | 作用 |
---|---|
notifyDataSetChanged() | 通知RecycelrView 进行全局刷新 |
notifyItemChanged(int position) | 通知RecycelrView 在adapter position 处局进行部刷新 |
notifyItemRemoved(int position) | 通知RecyclerView 移除在adapter position 处的item |
notifyItemMoved(int fromPosition, int toPosition) | 通知RecyclerView 移除从fromPosition 到toPosition 的item |
notifyItemRangeRemoved(int positionStart, int itemCount) | 通知RecyclerView 移除从positionStart 开始的itemCount 个item |
notifyItemChanged(int position, Object payload) | 通知RecyclerView 改变指定position 的item 的object |
notifyItemRangeChanged(int positionStart,int itemCount) | 通知RecyclerView 从positionStart 开始改变itemCount 个item |
notifyItemRangeChanged(int positionStart,int itemCount,Object payload) | 通知RecyclerView 从positionStart 开始改变itemCount 个item 的对象 |
notifyItemInserted(int position) | 通知RecyclerView 在position 处插入一个item |
notifyItemRangeInserted(int positionStart, int itemCount) | 通知RecyclerView 从positionStart 开始插入itemCount 个item |