package com.pukka.jiecheng.base; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; /** * @author MajorLL */ public abstract class BaseRecyclerAdapter extends RecyclerView.Adapter> { /** * 源数据 */ protected List mData; /** * item 点击事件 */ protected BaseOnItemClickListener onItemClickListener = null; /** * item 焦点变化事件 */ protected BaseOnItemFocusChangeListener onItemFocusChangeListener = null; /** * 获取当前布局资源文件ID * * @param viewType viewType类型 * @return 返回资源ID */ protected abstract int getLayoutId(int viewType); /** * 获取对应ViewHolder * * @param view * @param viewType * @return */ public abstract BaseRecyclerViewHolder getViewHolder(View view, int viewType); public BaseRecyclerAdapter(@NonNull List mData) { this.mData = mData; } /** * 获取对应位置泛型数据对象 * * @param position 位置 * @return 泛型数据 */ protected T getIndexData(int position) { if (mData == null || mData.size() <= position) { return null; } return mData.get(position); } @NonNull @Override public BaseRecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(getLayoutId(viewType), parent, false); return getViewHolder(view, viewType); } @Override public void onBindViewHolder(@NonNull BaseRecyclerViewHolder holder, int position) { holder.setData(getIndexData(position)); final int index = position; holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { holder.onItemClick(v, index, getIndexData(index)); if (onItemClickListener != null) { onItemClickListener.onItemClick(v, index, getIndexData(index)); } } }); holder.itemView.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { holder.onItemFocusChange(v, hasFocus); if (onItemFocusChangeListener != null) { onItemFocusChangeListener.onItemFocusChange(v, hasFocus, index, getIndexData(index)); } } }); } @Override public int getItemCount() { if (mData == null) { return 0; } return mData.size(); } /** * 获取空页面数量 * @return 空页面数量 */ public int getEmptyCount() { if (mData == null) { return 0; } int index = 0; for (T mDatum : mData) { if (mDatum == null) { index++; } } return index; } @Override public int getItemViewType(int position) { return super.getItemViewType(position); } /** * 设置对应得Item点击事件 * * @param onItemClickListener item点击事件回调 */ public void setOnItemClickListener(BaseOnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } /** * 设置对应item焦点事件 * * @param onItemFocusChangeListener item焦点事件回调 */ public void setOnItemFocusChangeListener(BaseOnItemFocusChangeListener onItemFocusChangeListener) { this.onItemFocusChangeListener = onItemFocusChangeListener; } }