Files
jiecheng-business/app/src/main/java/com/pukka/jiecheng/base/BaseRecyclerAdapter.java

145 lines
3.8 KiB
Java
Raw Normal View History

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<T> extends RecyclerView.Adapter<BaseRecyclerViewHolder<T>> {
/**
* 源数据
*/
protected List<T> mData;
/**
* item 点击事件
*/
protected BaseOnItemClickListener<T> onItemClickListener = null;
/**
* item 焦点变化事件
*/
protected BaseOnItemFocusChangeListener<T> onItemFocusChangeListener = null;
/**
* 获取当前布局资源文件ID
*
* @param viewType viewType类型
* @return 返回资源ID
*/
protected abstract int getLayoutId(int viewType);
/**
* 获取对应ViewHolder
*
* @param view
* @param viewType
* @return
*/
public abstract BaseRecyclerViewHolder<T> getViewHolder(View view, int viewType);
public BaseRecyclerAdapter(@NonNull List<T> 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<T> 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<T> 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<T> onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
/**
* 设置对应item焦点事件
*
* @param onItemFocusChangeListener item焦点事件回调
*/
public void setOnItemFocusChangeListener(BaseOnItemFocusChangeListener<T> onItemFocusChangeListener) {
this.onItemFocusChangeListener = onItemFocusChangeListener;
}
}