前言
-
效果预览
-
RecyclerView与Adapter交互流程
a. 调用Adapter.getItemCount()方法,RecyclerView询问数组列表中包含多少个待展示的视图。
b. RecyclerView调用Adapter.onCreateViewHolder(ViewGroup, int viewType)创建ViewHolder。其中viewType是方法getItemViewType(int position)给它的,二级列表需要关注viewType,因为明显一级视图与二级视图是有所区别的
c. RecyclerView会传入ViewHolder及其位置,调用onBindViewHolder(ViewHolder, int)方法。Adapter会找到目标位置的数据并将其绑定到ViewHolder的视图上。 -
adapter预览
public abstract class SecondRecyclerViewAdapter<K,V> extends RecyclerView.Adapter<MyViewHolder> {
//视图类型
public static final int GROUP_ITEM = 0 ;
public static final int SUB_ITEM = 1 ;
/*
* 数据源,包含一级item和二级item*/
protected List<MyItem<K,V>> items ;
//返回groupItem的布局
protected abstract int getGroupItemLayoutId();
//返回subItem的布局
protected abstract int getSubItemLayoutId();
//groupItem绑定数据
protected abstract void onBindSubItem(MyViewHolder holder, int position);
//subItem绑定数据
protected abstract void onBindGroupItem(MyViewHolder holder, int position);
public SecondRecyclerViewAdapter(List<MyItem<K, V>> items) {
this.items = items;
}
/*根据viewType绑定相对应的viewHolder*/
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
int layoutId = getSubItemLayoutId();
if(viewType == GROUP_ITEM){
layoutId = getGroupItemLayoutId();
}
ViewDataBinding dataBinding =
DataBindingUtil.inflate(LayoutInflater.from(parent.getContext