CommonAdapter
public abstract class CommonAdapter<T> extends RecyclerView.Adapter<ViewHolder> {
protected Context mContext;
LayoutInflater mInflater;
List<T> mDatas;
public CommonAdapter(Context context, List<T> data) {
this.mContext = context;
this.mDatas = data;
mInflater = LayoutInflater.from(context);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = mInflater.inflate(getLayoutId(), viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
convert(viewHolder, mDatas.get(i), i);
}
@Override
public int getItemCount() {
return mDatas.size();
}
public abstract int getLayoutId();
public abstract void convert(ViewHolder viewHolder, T item, int position);
}
ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder {
// 用來存放子View減少findViewById的次數
private SparseArray<View> views;
public ViewHolder(@NonNull View itemView) {
super(itemView);
views = new SparseArray<>();
}
public ViewHolder setText(int viewID, @NonNull CharSequence text) {
TextView tv = getView(viewID);
tv.setText(text);
return this;
}
/**
* 獲取view
*
* @param viewId 要獲取的id
* @param <T> 泛型
* @return 返回
*/
public <T extends View> T getView(int viewId) {
View view = views.get(viewId);
if (view == null) {
view = itemView.findViewById(viewId);
views.put(viewId, view);
}
return (T) view;
}
/**
* 設置指定view的顯示隱藏
*
* @param viewID viewId
* @param visibility 是否可見
* @return 返回
*/
public ViewHolder setViewVisibility(int viewID, int visibility) {
getView(viewID).setVisibility(visibility);
return this;
}
/**
* 設置指定view的圖片
*
* @param viewId viewId
* @param resourceId 圖片id
* @return 返回
*/
public ViewHolder setImageResource(int viewId, int resourceId) {
ImageView iv = getView(viewId);
iv.setImageResource(resourceId);
return this;
}
public void setOnItemClickListener(View.OnClickListener onClickListener) {
itemView.setOnClickListener(onClickListener);
}
public void setOnItemLongClickListener(View.OnLongClickListener onLongClickListener) {
itemView.setOnLongClickListener(onLongClickListener);
}
}