package com.doumee.lib_coremodel.view.recyclerview.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.LayoutRes; import androidx.recyclerview.widget.AsyncListDiffer; import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.RecyclerView; import com.king.base.adapter.HolderRecyclerAdapter; import com.king.base.adapter.holder.ViewHolder; import java.util.List; public abstract class DiffHolderRecyclerAdapter extends RecyclerView.Adapter implements ViewHolder.OnItemClick{ private Context context; private AsyncListDiffer mDiffer; private LayoutInflater layoutInflater; private HolderRecyclerAdapter.OnItemClickListener mOnItemClickListener; private HolderRecyclerAdapter.OnItemChildClickListener mOnItemChildClickListener; public interface OnItemClickListener{ void onItemClick(View v, int position); } public void setOnItemClickListener(HolderRecyclerAdapter.OnItemClickListener clickListener){ this.mOnItemClickListener = clickListener; } protected void onItemClick(View v,int position){ if(mOnItemClickListener!=null){ mOnItemClickListener.onItemClick(v,position); } } public interface OnItemChildClickListener{ void onItemChildClick(View v, int position); } public void setOnItemChildClickListener(HolderRecyclerAdapter.OnItemChildClickListener clickListener){ this.mOnItemChildClickListener = clickListener; } @Override public void onItemClick(View v,int position,boolean isChild){ if(isChild){ if(mOnItemChildClickListener!=null){ mOnItemChildClickListener.onItemChildClick(v,position); } }else{ onItemClick(v,position); } } public DiffHolderRecyclerAdapter(Context context, DiffUtil.ItemCallback DIFF_CALLBACK){ super(); this.context = context; this.mDiffer= new AsyncListDiffer(this, DIFF_CALLBACK); this.layoutInflater = LayoutInflater.from(context); } public LayoutInflater getLayoutInflater(){ return layoutInflater; } public Context getContext(){ return context; } @Override public H onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = buildConvertView(layoutInflater,parent,viewType); return buildHolder(itemView,viewType); } @Override public void onBindViewHolder(H holder, final int position) { T item = position getListData() { return mDiffer.getCurrentList(); } public void setListData(List listData) { this.mDiffer.submitList(listData); } /** * 建立convertView * @param layoutInflater * @param parent * @param viewType * @return */ public abstract View buildConvertView(LayoutInflater layoutInflater, ViewGroup parent, int viewType); /** * 建立视图Holder * @param convertView * @param viewType * @return */ public abstract H buildHolder(View convertView,int viewType); /** * 绑定数据 * @param holder * @param item * @param position */ public abstract void bindViewDatas(H holder,T item,int position); }