天天看点

安卓RecyclerView.AdapterRecyclerView.Adapter适配器

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

 的过程如下图:

安卓RecyclerView.AdapterRecyclerView.Adapter适配器

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