BaseViewHolder
import android.view.View;
import androidx.recyclerview.widget.RecyclerView;
import android.widget.TextView;
import android.util.SparseArray;
public class BaseViewHolder extends RecyclerView.ViewHolder {
private View mRootView;
private SparseArray<View> mViews;
public BaseViewHolder(View view){
super(view);
mRootView=view;
mViews=new SparseArray<>();
}
public BaseViewHolder setText(int resid,CharSequence text){
TextView tv=findView(resid);
tv.setText(text);
return this;
}
public <T extends View> T findView(int resid){
View view=mViews.get(resid);
if(view==null){
view=mRootView.findViewById(resid);
mViews.put(resid,view);
}
return (T)view;
}
}
BaseAdapter
import androidx.recyclerview.widget.RecyclerView;
import android.view.ViewGroup;
import java.util.List;
import android.view.View;
import android.view.LayoutInflater;
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {
private int mLayoutResId;
private List<T> mDatas;
public BaseAdapter(int layoutResId, List<T> datas){
mLayoutResId=layoutResId;
mDatas=datas;
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup p1, int p2) {
View view=LayoutInflater.from(p1.getContext()).inflate(mLayoutResId, p1, false);
return new BaseViewHolder(view);
}
@Override
public void onBindViewHolder(BaseViewHolder p1, int p2) {
final T data=mDatas.get(p2);
convert(p1,data);
p1.itemView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1) {
if(mOnItemClickListener!=null){
mOnItemClickListener.onItemClick(p1, data);
}
}
});
}
@Override
public int getItemCount() {
return mDatas==null?0:mDatas.size();
}
public BaseAdapter setOnItemClick(OnItemClickListener<T> listener){
mOnItemClickListener=listener;
return this;
}
private OnItemClickListener<T> mOnItemClickListener;
public interface OnItemClickListener<T>{
public void onItemClick(View view, T item);
}
public abstract void convert(BaseViewHolder holder, T itemData);
}