package com.dl7.recycler.adapter; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.v7.widget.RecyclerView; import android.text.util.Linkify; import android.util.SparseArray; import android.view.View; import android.view.animation.AlphaAnimation; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.CheckedTextView; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.RatingBar; import android.widget.TextView; import com.dl7.recycler.helper.ItemTouchHelperViewHolder; /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ public class BaseViewHolder extends RecyclerView.ViewHolder implements ItemTouchHelperViewHolder { /** * Views indexed with their IDs */ private final SparseArray<View> views; public View convertView; private Drawable bgDrawable; private static Drawable dragDrawable; protected BaseViewHolder(View view) { super(view); this.views = new SparseArray<View>(); convertView = view; } public View getConvertView() { return convertView; } /** * Will set the text of a TextView. * * @param viewId The view id. * @param value The text to put in the text view. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setText(int viewId, CharSequence value) { TextView view = getView(viewId); view.setText(value); return this; } /** * Will set the image of an ImageView from a resource id. * * @param viewId The view id. * @param imageResId The image resource id. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setImageResource(int viewId, int imageResId) { ImageView view = getView(viewId); view.setImageResource(imageResId); return this; } /** * Will set background color of a view. * * @param viewId The view id. * @param color A color, not a resource id. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setBackgroundColor(int viewId, int color) { View view = getView(viewId); view.setBackgroundColor(color); return this; } /** * Will set background of a view. * * @param viewId The view id. * @param backgroundRes A resource to use as a background. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setBackgroundRes(int viewId, int backgroundRes) { View view = getView(viewId); view.setBackgroundResource(backgroundRes); return this; } /** * Will set text color of a TextView. * * @param viewId The view id. * @param textColor The text color (not a resource id). * @return The BaseViewHolder for chaining. */ public BaseViewHolder setTextColor(int viewId, int textColor) { TextView view = getView(viewId); view.setTextColor(textColor); return this; } /** * Will set the image of an ImageView from a drawable. * * @param viewId The view id. * @param drawable The image drawable. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setImageDrawable(int viewId, Drawable drawable) { ImageView view = getView(viewId); view.setImageDrawable(drawable); return this; } /** * Add an action to set the image of an image view. Can be called multiple times. */ public BaseViewHolder setImageBitmap(int viewId, Bitmap bitmap) { ImageView view = getView(viewId); view.setImageBitmap(bitmap); return this; } /** * Add an action to set the alpha of a view. Can be called multiple times. * Alpha between 0-1. */ public BaseViewHolder 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; } /** * Set a view visibility to VISIBLE (true) or GONE (false). * * @param viewId The view id. * @param visible True for VISIBLE, false for GONE. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setVisible(int viewId, boolean visible) { View view = getView(viewId); view.setVisibility(visible ? View.VISIBLE : View.GONE); return this; } public boolean isVisible(int viewId) { View view = getView(viewId); return view.getVisibility() == View.VISIBLE; } /** * Add links into a TextView. * * @param viewId The id of the TextView to linkify. * @return The BaseViewHolder for chaining. */ public BaseViewHolder linkify(int viewId) { TextView view = getView(viewId); Linkify.addLinks(view, Linkify.ALL); return this; } /** * Apply the typeface to the given viewId, and enable subpixel rendering. */ public BaseViewHolder setTypeface(int viewId, Typeface typeface) { TextView view = getView(viewId); view.setTypeface(typeface); view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); return this; } /** * Apply the typeface to all the given viewIds, and enable subpixel rendering. */ public BaseViewHolder 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; } /** * Sets the progress of a ProgressBar. * * @param viewId The view id. * @param progress The progress. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setProgress(int viewId, int progress) { ProgressBar view = getView(viewId); view.setProgress(progress); return this; } /** * Sets the progress and max of a ProgressBar. * * @param viewId The view id. * @param progress The progress. * @param max The max value of a ProgressBar. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setProgress(int viewId, int progress, int max) { ProgressBar view = getView(viewId); view.setMax(max); view.setProgress(progress); return this; } /** * Sets the range of a ProgressBar to 0...max. * * @param viewId The view id. * @param max The max value of a ProgressBar. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setMax(int viewId, int max) { ProgressBar view = getView(viewId); view.setMax(max); return this; } /** * Sets the rating (the number of stars filled) of a RatingBar. * * @param viewId The view id. * @param rating The rating. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setRating(int viewId, float rating) { RatingBar view = getView(viewId); view.setRating(rating); return this; } /** * Sets the rating (the number of stars filled) and max of a RatingBar. * * @param viewId The view id. * @param rating The rating. * @param max The range of the RatingBar to 0...max. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setRating(int viewId, float rating, int max) { RatingBar view = getView(viewId); view.setMax(max); view.setRating(rating); return this; } /** * Sets the on click listener of the view. * * @param viewId The view id. * @param listener The on click listener; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setOnClickListener(int viewId, View.OnClickListener listener) { View view = getView(viewId); view.setOnClickListener(listener); return this; } // public BaseViewHolder setOnClickListener(int viewId, BaseQuickAdapter.OnItemChildClickListener listener) { // View view = getView(viewId); // listener.mViewHolder = this; // view.setOnClickListener(listener); // return this; // } /** * Sets the on touch listener of the view. * * @param viewId The view id. * @param listener The on touch listener; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) { View view = getView(viewId); view.setOnTouchListener(listener); return this; } /** * Sets the on long click listener of the view. * * @param viewId The view id. * @param listener The on long click listener; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) { View view = getView(viewId); view.setOnLongClickListener(listener); return this; } /** * Sets the listview or gridview's item click listener of the view * * @param viewId The view id. * @param listener The item on click listener; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setOnItemClickListener(int viewId, AdapterView.OnItemClickListener listener) { AdapterView view = getView(viewId); view.setOnItemClickListener(listener); return this; } /** * Sets the listview or gridview's item long click listener of the view * * @param viewId The view id. * @param listener The item long click listener; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setOnItemLongClickListener(int viewId, AdapterView.OnItemLongClickListener listener) { AdapterView view = getView(viewId); view.setOnItemLongClickListener(listener); return this; } /** * Sets the listview or gridview's item selected click listener of the view * * @param viewId The view id. * @param listener The item selected click listener; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setOnItemSelectedClickListener(int viewId, AdapterView.OnItemSelectedListener listener) { AdapterView view = getView(viewId); view.setOnItemSelectedListener(listener); return this; } /** * Sets the on checked change listener of the view. * * @param viewId The view id. * @param listener The checked change listener of compound button. * @return The BaseViewHolder for chaining. */ public BaseViewHolder setOnCheckedChangeListener(int viewId, CompoundButton.OnCheckedChangeListener listener) { CompoundButton view = getView(viewId); view.setOnCheckedChangeListener(listener); return this; } /** * Sets the tag of the view. * * @param viewId The view id. * @param tag The tag; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setTag(int viewId, Object tag) { View view = getView(viewId); view.setTag(tag); return this; } /** * Sets the tag of the view. * * @param viewId The view id. * @param key The key of tag; * @param tag The tag; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setTag(int viewId, int key, Object tag) { View view = getView(viewId); view.setTag(key, tag); return this; } /** * Sets the checked status of a checkable. * * @param viewId The view id. * @param checked The checked status; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setChecked(int viewId, boolean checked) { View view = getView(viewId); // View unable cast to Checkable if (view instanceof CompoundButton) { ((CompoundButton) view).setChecked(checked); } else if (view instanceof CheckedTextView) { ((CheckedTextView) view).setChecked(checked); } return this; } public BaseViewHolder setSelected(int viewId, boolean selected) { View view = getView(viewId); view.setSelected(selected); return this; } public boolean isSelected(int viewId) { View view = getView(viewId); return view.isSelected(); } /** * Sets the adapter of a adapter view. * * @param viewId The view id. * @param adapter The adapter; * @return The BaseViewHolder for chaining. */ public BaseViewHolder setAdapter(int viewId, Adapter adapter) { AdapterView view = getView(viewId); view.setAdapter(adapter); return this; } @SuppressWarnings("unchecked") public <T extends View> T getView(int viewId) { View view = views.get(viewId); if (view == null) { view = convertView.findViewById(viewId); views.put(viewId, view); } return (T) view; } /************************************拖拽滑动****************************************/ @Override public void onItemSelected() { if (bgDrawable == null) { bgDrawable = itemView.getBackground(); } if (dragDrawable == null) { dragDrawable = new ColorDrawable(Color.LTGRAY); } itemView.setBackgroundDrawable(dragDrawable); } @Override public void onItemClear() { itemView.setBackgroundDrawable(bgDrawable); } public static void setDragColor(int dragColor) { BaseViewHolder.dragDrawable = new ColorDrawable(dragColor); } public static void setDragDrawable(Drawable drawable) { BaseViewHolder.dragDrawable = drawable; } }