安卓RecyclerView.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的根ViewGroupitem的子控件加载在其中
  • int viewTypeitem的类型,可以根据viewType来创建不同的ViewHolder,来加载不同的类型的item
这个方法就是用来创建出一个新的 ViewHolder ,可以根据需求的 itemType ,创建出多个 ViewHolder
viewType是getItemViewType(int position)方法的返回值


2.onBindViewHolder(RecyclerHolder holder, int position)绑定ViewHolder

  • VH holder:就是在onCreateViewHolder()方法中,创建的ViewHolder
  • int positionitem对应的dataBeanList数据源集合的postion

postion就是adapter positionRecycelrViewitem的数量,就是根据dataBeanList数据源集合的数量来创建的.


3. getItemCount()获取Item的数目

这个方法的返回值,便是RecyclerView中实际item的数量。有些情况下,当增加了HeaderView或者FooterView后,

需要注意考虑这个返回值.


4 .getItemType(int position)获取Item的类型

  • int positionitem对应的dataBeanList数据源集合的postion


5.总结及流程

onCreateViewHolder() 为每个项目创建 ViewHolder 
onBindViewHolder() 处理每个 item 
getItemViewType() 在 onCreateViewHolder 前调用,返回 item 类型 
getItemCount() 获取 item 总数 

加载 RecyclerView 的过程如下图:



6.一些常用到方法

方法 作用
notifyDataSetChanged() 通知RecycelrView进行全局刷新
notifyItemChanged(int position) 通知RecycelrViewadapter position处局进行部刷新
notifyItemRemoved(int position) 通知RecyclerView移除在adapter position处的item
notifyItemMoved(int fromPosition, int toPosition) 通知RecyclerView移除从fromPositiontoPositionitem
notifyItemRangeRemoved(int positionStart, int itemCount) 通知RecyclerView移除从positionStart开始的itemCountitem
notifyItemChanged(int position, Object payload) 通知RecyclerView改变指定positionitemobject
notifyItemRangeChanged(int positionStart,int itemCount) 通知RecyclerViewpositionStart开始改变itemCountitem
notifyItemRangeChanged(int positionStart,int itemCount,Object payload) 通知RecyclerViewpositionStart开始改变itemCountitem的对象
notifyItemInserted(int position) 通知RecyclerViewposition处插入一个item
notifyItemRangeInserted(int positionStart, int itemCount) 通知RecyclerViewpositionStart开始插入itemCountitem






猜你喜欢

转载自blog.csdn.net/xxdw1992/article/details/80189862