public abstract class BaseModelRVAdapter<T, K extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<K> {
private OnItemClickListener onItemClickListener;
private OnClickListener onClickListener;
protected LayoutInflater inflater;
protected Context context;
protected List<T> listData;
public BaseModelRVAdapter(Context context, List<T> listData) {
this.context = context;
this.listData = listData;
this.inflater = LayoutInflater.from(context);
initListener();
}
/**
* 初始化listener
*/
private void initListener() {
onClickListener = new OnClickListener() {
@Override
public void onClick(int position, long itemId) {
if (onItemClickListener != null)
onItemClickListener.onItemClick(position, itemId);
}
};
}
@Override
public K onCreateViewHolder(ViewGroup parent, int viewType) {
final K holder = onCreateCustomViewHolder(parent, viewType);
if (holder != null) {
holder.itemView.setTag(holder);
holder.itemView.setOnClickListener(onClickListener);
}
return holder;
}
@Override
public void onBindViewHolder(K holder, int position) {
if (null == holder) return;
onBindCustomViewHolder(holder, position);
}
@Override
public int getItemCount() {
return null == listData ? 0 : listData.size();
}
public abstract K onCreateCustomViewHolder(ViewGroup parent, int viewType);
public abstract void onBindCustomViewHolder(K h, int position);
public interface OnItemClickListener {
void onItemClick(int position, long itemId);
}
/**
* 添加项点击事件
*
* @param onItemClickListener the RecyclerView item click listener
*/
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
/**
* 可以共用同一个listener,相对高效
*/
public static abstract class OnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
RecyclerView.ViewHolder holder = (RecyclerView.ViewHolder) v.getTag();
onClick(holder.getAdapterPosition(), holder.getItemId());
}
public abstract void onClick(int position, long itemId);
}
}