package party.danyang.nationalgeographic.adapter.base; import android.databinding.DataBindingUtil; import android.databinding.ViewDataBinding; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * Created by dream on 16-7-27. */ public abstract class BaseAdapter<E> extends ArrayRecyclerAdapter<E, BaseAdapter.ViewHolder> { private int layoutRes; public BaseAdapter(int layoutRes, List<E> data) { super(data); if (layoutRes != 0) { this.layoutRes = layoutRes; } } public BaseAdapter(int layoutResId) { this(layoutResId, null); } public BaseAdapter() { this(0); } public void setLayoutRes(int layoutRes) { this.layoutRes = layoutRes; } public abstract void setBingVariables(ViewDataBinding binding, int position); @Override public void onBindViewHolder(final BaseAdapter.ViewHolder holder, final int position) { setBingVariables(holder.getBinding(), position); if (mOnItemClickListener != null) holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mOnItemClickListener.onItemClick(holder.itemView, position); } }); holder.getBinding().executePendingBindings(); } @Override public BaseAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater .from(parent.getContext()), layoutRes, parent, false); ViewHolder holder = new ViewHolder(binding.getRoot()); holder.setBinding(binding); return holder; } public class ViewHolder extends RecyclerView.ViewHolder { private ViewDataBinding binding; public ViewHolder(View itemView) { super(itemView); } public void setBinding(ViewDataBinding binding) { this.binding = binding; } public ViewDataBinding getBinding() { return this.binding; } } public interface OnItemClickListener { void onItemClick(View view, int position); } private OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.mOnItemClickListener = onItemClickListener; } }