public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
protected LayoutInflater inflater;
protected Context context;
protected List<T> listData;
public List<T> getListData() {
return listData;
}
public void setListData(List<T> listData) {
this.listData = listData;
}
private OnItemClickListener onItemClickListener;
private OnClickListener onClickListener;
public BaseRecyclerAdapter(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 RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final RecyclerView.ViewHolder holder = onCreateCustomViewHolder(parent, viewType);
if (holder != null) {
holder.itemView.setTag(holder);
// holder.itemView.setOnLongClickListener(onLongClickListener);
holder.itemView.setOnClickListener(onClickListener);
}
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (null==holder) return;
onBindCustomViewHolder(holder, position);
}
@Override
public int getItemCount() {
return null == listData ? 0 : listData.size();
}
public abstract RecyclerView.ViewHolder onCreateCustomViewHolder(ViewGroup parent, int viewType);
public abstract void onBindCustomViewHolder(RecyclerView.ViewHolder 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);
}
public void replaceItem(T item){
if (null!=listData){
listData.clear();
listData.add(item);
}
}
public void replaceItem(List<T> items){
if (null!=listData){
listData.clear();
listData.addAll(items);
}
}
public void addItem(T item) {
if (null != listData) listData.add(item);
}
public void addItem(List<T> items) {
if (null != listData) listData.addAll(items);
}
public void deleteItem(int position) {
if (null != listData && null != listData.get(position)) listData.remove(position);
}
public void deleteItem(T item) {
if (null != listData) listData.remove(item);
}
public void clearItem(){
if (null!=listData) listData.clear();
}
public void refresh(){
notifyItemChanged(listData.size()-1);
}
}