写在前面:最近项目上需要,这是一点记录
一.需求:
recycleview中可以实现多种不同的bean,加载不同的数据源内容在同一个adapter上。(以下用两种举例)
二.思路
1.首先需要两种list data,呈现在一个adapter上时,需要根据位置来进行区别,RecyclerView.Adapter中的getItemViewType可以很好的区别多种数据类型
2.你有多少种bean,就需要多少种viewholder
三.以下是代码,提供注释
//我这里用两种数据源,多种可适当增加<T, K,...>泛型
public abstract class BaseRecycleViewAdapter<T, K> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final String TAG = "zht";
private static final int TYPE_FOLDER = 0;
private static final int TYPE_PHOTO = 1;
protected List<T> mData1;
protected List<K> mData2;
protected Context mContext;
protected LayoutInflater mLayoutInflater;
protected int mLayoutResId1;//这里是实现不同数据源的呈现的布局1
protected int mLayoutResId2;//这里是实现不同数据源的呈现的布局2
private OnRecycleViewItemClickListener onRecycleViewItemClickListener;
private OnRecycleViewItemLongClickListener onRecycleViewItemLongClickListener;
public BaseRecycleViewAdapter(Context context, List<T> data1, List<K> data2) {
mLayoutResId1 = attachLayoutRes1();
mLayoutResId2 = attachLayoutRes2();
if (data1 == null || data2 == null) {
mData1 = new ArrayList<>();
mData2 = new ArrayList<>();
} else {
this.mData1 = data1;
this.mData2 = data2;
}
this.mContext = context;
this.mLayoutInflater = LayoutInflater.from(mContext);
}
//以下四个方法会在子类adapter中使用