package com.mcxtzhang.commonadapter.viewgroup.adapter.cache; import android.annotation.SuppressLint; import android.graphics.Bitmap; import android.graphics.Paint; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; import android.text.util.Linkify; import android.util.SparseArray; import android.view.View; import android.view.animation.AlphaAnimation; import android.widget.AbsListView; import android.widget.Checkable; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.RatingBar; import android.widget.TextView; /** * 介绍:V1.5.0 引入 ViewCache概念 * 配合ViewCache 存储 ItemViewType 信息 * 作者:zhangxutong * 邮箱:mcxtzhang@163.com * 主页:http://blog.csdn.net/zxt0601 * 时间: 2016/12/29. */ public class ViewHolder { public final View itemView; public final int itemViewType; private SparseArray<View> mChilds; public ViewHolder(View itemView, int itemViewType) { if (itemView == null) { throw new IllegalArgumentException("itemView may not be null"); } this.itemView = itemView; this.itemViewType = itemViewType; mChilds = new SparseArray<>(); } public <V extends View> V findViewById(int id) { return getView(id); } public <V extends View> V getView(int id) { View child = mChilds.get(id); if (child == null) { child = itemView.findViewById(id); mChilds.put(id, child); } return (V) child; } /** * 设置TextView的值 * * @param viewId * @param text * @return */ public ViewHolder setText(int viewId, CharSequence text) { TextView tv = getView(viewId); tv.setText(text); return this; } public ViewHolder setSelected(int viewId, boolean selected) { View v = getView(viewId); v.setSelected(selected); return this; } public ViewHolder setImageResource(int viewId, int resId) { ImageView view = getView(viewId); view.setImageResource(resId); return this; } public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) { ImageView view = getView(viewId); view.setImageBitmap(bitmap); return this; } public ViewHolder setImageDrawable(int viewId, Drawable drawable) { ImageView view = getView(viewId); view.setImageDrawable(drawable); return this; } public ViewHolder setBackgroundColor(int viewId, int color) { View view = getView(viewId); view.setBackgroundColor(color); return this; } public ViewHolder setBackgroundRes(int viewId, int backgroundRes) { View view = getView(viewId); view.setBackgroundResource(backgroundRes); return this; } public ViewHolder setTextColor(int viewId, int textColor) { TextView view = getView(viewId); view.setTextColor(textColor); return this; } public ViewHolder setTextColorRes(int viewId, int textColorRes) { TextView view = getView(viewId); view.setTextColor(itemView.getContext().getResources().getColor(textColorRes)); return this; } @SuppressLint("NewApi") public ViewHolder setAlpha(int viewId, float value) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getView(viewId).setAlpha(value); } else { // Pre-honeycomb hack to set Alpha value AlphaAnimation alpha = new AlphaAnimation(value, value); alpha.setDuration(0); alpha.setFillAfter(true); getView(viewId).startAnimation(alpha); } return this; } public ViewHolder setVisible(int viewId, boolean visible) { View view = getView(viewId); view.setVisibility(visible ? View.VISIBLE : View.GONE); return this; } public ViewHolder linkify(int viewId) { TextView view = getView(viewId); Linkify.addLinks(view, Linkify.ALL); return this; } public ViewHolder setTypeface(Typeface typeface, int... viewIds) { for (int viewId : viewIds) { TextView view = getView(viewId); view.setTypeface(typeface); view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); } return this; } public ViewHolder setProgress(int viewId, int progress) { ProgressBar view = getView(viewId); view.setProgress(progress); return this; } public ViewHolder setProgress(int viewId, int progress, int max) { ProgressBar view = getView(viewId); view.setMax(max); view.setProgress(progress); return this; } public ViewHolder setMax(int viewId, int max) { ProgressBar view = getView(viewId); view.setMax(max); return this; } public ViewHolder setRating(int viewId, float rating) { RatingBar view = getView(viewId); view.setRating(rating); return this; } public ViewHolder setRating(int viewId, float rating, int max) { RatingBar view = getView(viewId); view.setMax(max); view.setRating(rating); return this; } public ViewHolder setTag(int viewId, Object tag) { View view = getView(viewId); view.setTag(tag); return this; } public ViewHolder setTag(int viewId, int key, Object tag) { View view = getView(viewId); view.setTag(key, tag); return this; } public ViewHolder setChecked(int viewId, boolean checked) { Checkable view = (Checkable) getView(viewId); view.setChecked(checked); return this; } /** * 关于事件的 */ public ViewHolder setOnClickListener(int viewId, View.OnClickListener listener) { View view = getView(viewId); view.setOnClickListener(listener); return this; } public ViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) { View view = getView(viewId); view.setOnTouchListener(listener); return this; } public ViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) { View view = getView(viewId); view.setOnLongClickListener(listener); return this; } /** * 隐藏或展示Item * * @param visible */ public void setItemVisible(boolean visible) { if (null != itemView) { if (visible) { if (null != itemView.getLayoutParams()) { itemView.getLayoutParams().width = AbsListView.LayoutParams.MATCH_PARENT; itemView.getLayoutParams().height = AbsListView.LayoutParams.WRAP_CONTENT; } else { itemView.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT)); } itemView.setVisibility(View.VISIBLE); } else { if (null != itemView.getLayoutParams()) { itemView.getLayoutParams().width = -1; itemView.getLayoutParams().height = 1; } else { itemView.setLayoutParams(new AbsListView.LayoutParams(-1, 1)); } itemView.setVisibility(View.GONE); } } } public void setHItemVisible(boolean visible) { if (null != itemView) { if (visible) { if (null != itemView.getLayoutParams()) { itemView.getLayoutParams().width = AbsListView.LayoutParams.WRAP_CONTENT; itemView.getLayoutParams().height = AbsListView.LayoutParams.WRAP_CONTENT; } else { itemView.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT)); } itemView.setVisibility(View.VISIBLE); } else { if (null != itemView.getLayoutParams()) { itemView.getLayoutParams().width = -1; itemView.getLayoutParams().height = 1; } else { itemView.setLayoutParams(new AbsListView.LayoutParams(-1, 1)); } itemView.setVisibility(View.GONE); } } } }