package com.mcxtzhang.zxtcommonlib.databinding.base;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.mcxtzhang.zxtcommonlib.BR;
import java.util.ArrayList;
import java.util.List;
/**
* 介绍:普通Adapter
* 泛型D:是Bean类型,如果有就传。
* 泛型B:是对应的xml Layout的Bingding类
* 作者:zhangxutong
* 邮箱:mcxtzhang@163.com
* CSDN:http://blog.csdn.net/zxt0601
* 时间: 16/09/25.
*/
public class BaseBindingAdapter<D, B extends ViewDataBinding> extends RecyclerView.Adapter<BaseBindingVH<B>> {
protected Context mContext;
protected int mLayoutId;
protected List<D> mDatas;
protected LayoutInflater mInfalter;
public BaseBindingAdapter(Context mContext, int mLayoutId, List mDatas) {
this.mContext = mContext;
this.mLayoutId = mLayoutId;
this.mDatas = mDatas;
this.mInfalter = LayoutInflater.from(mContext);
}
public BaseBindingAdapter(Context mContext, List mDatas) {
this.mContext = mContext;
this.mDatas = mDatas;
this.mInfalter = LayoutInflater.from(mContext);
}
@Override
public BaseBindingVH<B> onCreateViewHolder(ViewGroup parent, int viewType) {
BaseBindingVH<B> holder = new BaseBindingVH<B>((B) DataBindingUtil.inflate(mInfalter, mLayoutId, parent, false));
onCreateViewHolder(holder);
return holder;
}
/**
* 如果需要给Vh设置监听器啥的 可以在这里
*
* @param holder
*/
public void onCreateViewHolder(BaseBindingVH<B> holder) {
}
/**
* 子类除了绑定数据,还要设置监听器等其他操作。
* 可以重写这个方法,不要删掉super.onBindViewHolder(holder, position);
*
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(BaseBindingVH<B> holder, int position) {
holder.getBinding().setVariable(BR.data, mDatas.get(position));
holder.getBinding().setVariable(BR.presenter,getItemPresenter());
holder.getBinding().executePendingBindings();
}
@Override
public int getItemCount() {
return null != mDatas ? mDatas.size() : 0;
}
private Object mItemPresenter;
public Object getItemPresenter() {
return mItemPresenter;
}
public BaseBindingAdapter setItemPresenter(Object itemPresenter) {
mItemPresenter = itemPresenter;
return this;
}
/**
* 刷新数据,初始化数据
*
* @param list
*/
public void setDatas(List<D> list) {
if (this.mDatas != null) {
if (null != list) {
List<D> temp = new ArrayList<D>();
temp.addAll(list);
this.mDatas.clear();
this.mDatas.addAll(temp);
} else {
this.mDatas.clear();
}
} else {
this.mDatas = list;
}
notifyDataSetChanged();
}
/**
* 删除数据
*
* @param i
*/
public void remove(int i) {
if (null != mDatas && mDatas.size() > i && i > -1) {
mDatas.remove(i);
notifyDataSetChanged();
}
}
/**
* 加载更多数据
*
* @param list
*/
public void addDatas(List<D> list) {
if (null != list) {
List<D> temp = new ArrayList<D>();
temp.addAll(list);
if (this.mDatas != null) {
this.mDatas.addAll(temp);
} else {
this.mDatas = temp;
}
notifyDataSetChanged();
}
}
public List<D> getDatas() {
return mDatas;
}
}