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<T,H extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<H> implements ViewHolder.OnItemClick{
|
|
private Context context;
|
private AsyncListDiffer<T> 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<T> 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<mDiffer.getCurrentList().size() ? mDiffer.getCurrentList().get(position) : null;
|
|
bindViewDatas(holder,item,position);
|
if(this.mOnItemClickListener!=null){
|
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
onItemClick(v,position);
|
}
|
});
|
}
|
|
if(holder instanceof ViewHolder){
|
((ViewHolder)holder).setItemClick(this);
|
}
|
}
|
|
@Override
|
public int getItemCount() {
|
return (mDiffer==null||mDiffer.getCurrentList()==null) ? 0:mDiffer.getCurrentList().size();
|
}
|
|
public View inflate(@LayoutRes int layoutId, ViewGroup parent, boolean attachToRoot){
|
return layoutInflater.inflate(layoutId,parent,attachToRoot);
|
}
|
|
public List<T> getListData() {
|
return mDiffer.getCurrentList();
|
}
|
|
public void setListData(List<T> 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);
|
}
|