public abstract class BaseAdapter<E> extends RecyclerView.Adapter {
public void setDatas(List<E> datas) {
this.mDatas.clear();
if (mDatas != null) {
this.mDatas.addAll(datas);
}
notifyDataSetChanged();
}
public void addDatas(List<E> datas) {
if (datas != null) {
int size = this.mDatas.size();
this.mDatas.addAll(datas);
notifyItemRangeInserted(size, datas.size());
}
}
/**
* 不要直接赋值,容易被外边的数据影响
*/
protected List<E> mDatas = new ArrayList<>();
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
ViewDataBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(viewGroup
.getContext()), getLayoutId(i), viewGroup, false);
return new RecyclerView.ViewHolder(viewDataBinding.getRoot()) {
};
}
/**
* 为了兼容多个type,所以要写方法回调,而不是传入一个。
*
* @param type
* @return
*/
protected abstract int getLayoutId(int type);
/**
* 为了兼容多个type,所以写成父类,没有使用泛型。
*
* @param type
* @param itemView
* @return
*/
protected void onBindData(ViewDataBinding viewDataBinding, E data, View itemView, int
position) {
//把xml中data的variable的名字写一样就可以直接一次性设置数据了。
viewDataBinding.setVariable(1, data);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
onBindData(DataBindingUtil.getBinding(viewHolder.itemView), getItem(i), viewHolder
.itemView, i);
}
protected E getItem(int position) {
return mDatas.get(position);
}
@Override
public int getItemCount() {
return mDatas.size();
}
}
网友评论