public class CommonViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener, View.OnClickListener { private SparseArray<View> viewSparseArray; private onItemOnClickListener onItemClickListener; private onItemOnLongClickListener onItemOnLongClickListener; private Context context; private ImageOnClickListener clickListener; public CommonViewHolder(View itemView, Context context) { super(itemView); itemView.setOnClickListener(this); itemView.setOnLongClickListener(this); this.context = context; viewSparseArray = new SparseArray<>(); } /** * 根据 ID 来获取 View * * @param viewId viewID * @param <T> 泛型 * @return 将结果强转为 View 或 View 的子类型 */ public <T extends View> T getView(int viewId) { // 先从缓存中找,找打的话则直接返回 // 如果找不到则 findViewById ,再把结果存入缓存中 View view = viewSparseArray.get(viewId); if (view == null) { view = itemView.findViewById(viewId); viewSparseArray.put(viewId, view); } return (T) view; } public CommonViewHolder setText(int viewId, CharSequence text) { TextView tv = getView(viewId); tv.setText(text); return this; } public CommonViewHolder setViewVisibility(int viewId, int visibility) { getView(viewId).setVisibility(visibility); return this; } public CommonViewHolder setImageResource(int viewId, int resourceId) { ImageView imageView = getView(viewId); Glide.with(context).load(resourceId).into(imageView); return this; } public CommonViewHolder setImageResourceURL(int viewId, String resourceId) { ImageView imageView = getView(viewId); Glide.with(context).load(resourceId).into(imageView); return this; } public CommonViewHolder setImageResourceURLCrop(int viewId, String resourceId) { ImageView imageView = getView(viewId); Picasso.with(context).load(resourceId).transform(new CircleTransform(10)).into(imageView); return this; } public CommonViewHolder setTextColor(int viewId, int color) { TextView imageView = getView(viewId); imageView.setTextColor(0xffFF0000); return this; } public CommonViewHolder setImageResourceURLandClick(int viewId, String resourceId, View.OnClickListener listener) { final ImageView imageView = getView(viewId); Glide.with(context).load(resourceId).into(imageView); imageView.setOnClickListener(listener); return this; } public CommonViewHolder setTagGroup(int viewId, List <String> resourceId) { final TagCloudView tagCloudView = getView(viewId); List<String> tags = new ArrayList<>(); for (int i = 0; i < resourceId.size(); i++) { tags.add(resourceId.get(i)); } tagCloudView.setTags(tags); return this; } public CommonViewHolder setImageClickListner(int viewId, View.OnClickListener listener) { final ImageView imageView = getView(viewId); imageView.setOnClickListener(listener); return this; } public CommonViewHolder setTextViewListener(int viewId, View.OnClickListener listener) { final TextView textView = getView(viewId); textView.setOnClickListener(listener); return this; } public CommonViewHolder setImageResourceUrl(int viewId, String url) { ImageView imageView = getView(viewId); Glide.with(context).load(url).into(imageView); return this; } public void setImageOnClickListener(int viewId) { ImageView imageView = getView(viewId); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (clickListener != null) { clickListener.onImageClickListner(getAdapterPosition()); } } }); } public interface ImageOnClickListener { void onImageClickListner(int postion); } public void setImageOnClick(ImageOnClickListener listener) { this.clickListener = listener; } public interface onItemOnClickListener { void onItemClickListener(int position); } public interface onItemOnLongClickListener { void onItemLongClickListener(int position); } public void setOnClickListener(onItemOnClickListener commonClickListener) { this.onItemClickListener = commonClickListener; } public void setOnLongnClickListener(onItemOnLongClickListener commonClickListener) { this.onItemOnLongClickListener = commonClickListener; } @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onItemClickListener(getAdapterPosition()); } } @Override public boolean onLongClick(View v) { if (onItemOnLongClickListener != null) { onItemOnLongClickListener.onItemLongClickListener(getAdapterPosition()); } return false; } }
public abstract class CommonRecycleAdapter<T> extends RecyclerView.Adapter<CommonViewHolder> { private boolean animationsLocked = false; private boolean delayEnterAnimation = true; private int itemCount = 0; private int lastAnimatedPosition = -1; protected LayoutInflater layoutInflater; protected List<T> dataList; protected int layoutId; private Context context; public CommonRecycleAdapter(Context context, List<T> dataList, int layoutId) { this.layoutInflater = LayoutInflater.from(context); this.dataList = dataList; this.layoutId = layoutId; this.context = context; } @Override public int getItemViewType(int position) { return super.getItemViewType(position); } @Override public CommonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = layoutInflater.inflate(layoutId, parent, false); return new CommonViewHolder(itemView, context); } @Override public void onBindViewHolder(CommonViewHolder holder, int position) { bindData(holder, dataList.get(position), position); } @Override public int getItemCount() { return dataList == null ? 0 : dataList.size(); } public abstract void bindData(CommonViewHolder holder, T data, int postion); }