RecycleView适配器的封装

来源:互联网 发布:全国姓名数据库 官方 编辑:程序博客网 时间:2024/05/29 07:14


BaseAdapter的封装


package com.diction.app.android.base.recycle_adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import java.util.ArrayList;import java.util.Collections;import java.util.List;public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerViewHolder> {    protected final List<T> mItems;    protected final Context mContext;    protected LayoutInflater mInflater;    private OnItemClickListener mClickListener;    private OnItemLongClickListener mLongClickListener;    public BaseRecyclerAdapter(Context ctx, List<T> list) {        mItems = (list != null) ? list : new ArrayList<T>();        mContext = ctx;        mInflater = LayoutInflater.from(ctx);    }    @Override    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        final RecyclerViewHolder holder = new RecyclerViewHolder(mInflater.inflate(getItemLayoutId(viewType), parent, false));        if (mClickListener != null) {            holder.itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    mClickListener.onItemClick(holder.itemView, holder.getLayoutPosition());                }            });        }        if (mLongClickListener != null) {            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {                @Override                public boolean onLongClick(View v) {                    mLongClickListener.onItemLongClick(holder.itemView, holder.getLayoutPosition());                    return true;                }            });        }        return holder;    }    @Override    public void onBindViewHolder(RecyclerViewHolder holder, int position) {        bindData(holder, position, mItems.get(position));    }    @Override    public int getItemCount() {        return mItems.size();    }    public void add(int pos, T item) {        mItems.add(pos, item);        notifyItemInserted(pos);    }    public void delete(int pos) {        mItems.remove(pos);        notifyItemRemoved(pos);    }    public void swap(int fromPosition, int toPosition) {        Collections.swap(mItems, fromPosition, toPosition);        notifyItemMoved(fromPosition, toPosition);    }    final public void setOnItemClickListener(OnItemClickListener listener) {        mClickListener = listener;    }    final public void setOnItemLongClickListener(OnItemLongClickListener listener) {        mLongClickListener = listener;    }    /**     * 重写该方法,根据viewType设置item的layout     *     * @param viewType 通过重写getItemViewType()设置,默认item是0     * @return     */    abstract protected int getItemLayoutId(int viewType);    /**     * 重写该方法进行item数据项视图的数据绑定     *     * @param holder   通过holder获得item中的子View,进行数据绑定     * @param position 该item的position     * @param item     映射到该item的数据     */    abstract protected void bindData(RecyclerViewHolder holder, int position, T item);    public interface OnItemClickListener {        void onItemClick(View itemView, int pos);    }    public interface OnItemLongClickListener {        void onItemLongClick(View itemView, int pos);    }    @Override    public void onViewAttachedToWindow(RecyclerViewHolder holder) {        super.onViewAttachedToWindow(holder);    }}



ViewHolder的封装


package com.diction.app.android.base.recycle_adapter;import android.annotation.TargetApi;import android.content.Context;import android.graphics.Bitmap;import android.graphics.drawable.Drawable;import android.net.Uri;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.AdapterView;/** * 适用于RecyclerView的ViewHolder */public class RecyclerViewHolder extends RecyclerView.ViewHolder {    /**     * ViewHolder实现类,桥接模式适配AbsListView与RecyclerView的二维变化     */    ViewHolderImpl mHolderImpl ;    /**     * @param itemView     */    public RecyclerViewHolder(View itemView) {        super(itemView);        mHolderImpl = new ViewHolderImpl( itemView ) ;    }    public Context getContext() {        return  mHolderImpl.mItemView.getContext() ;    }    /**     * @param viewId     * @param <T>     * @return     */    public <T extends View> T findViewById(int viewId) {        return mHolderImpl.findViewById(viewId);    }    public View getItemView() {        return mHolderImpl.getItemView();    }    public RecyclerViewHolder setText(int viewId, int stringId) {        mHolderImpl.setText(viewId, stringId);        return this;    }    public RecyclerViewHolder setText(int viewId, String text) {        mHolderImpl.setText(viewId, text);        return this;    }    public RecyclerViewHolder setTextColor(int viewId, int color) {        mHolderImpl.setTextColor(viewId, color);        return this;    }    /**     * @param viewId     * @param color     */    public RecyclerViewHolder setBackgroundColor(int viewId, int color) {        mHolderImpl.setBackgroundColor(viewId, color);        return this;    }    /**     * @param viewId     * @param resId     */    public RecyclerViewHolder setBackgroundResource(int viewId, int resId) {        mHolderImpl.setBackgroundResource(viewId, resId);        return this;    }    /**     * @param viewId     * @param drawable     */    public RecyclerViewHolder setBackgroundDrawable(int viewId, Drawable drawable) {        mHolderImpl.setBackgroundDrawable(viewId, drawable);        return this;    }    /**     * @param viewId     * @param drawable     */    @TargetApi(16)    public RecyclerViewHolder setBackground(int viewId, Drawable drawable) {        mHolderImpl.setBackground(viewId, drawable);        return this;    }    public RecyclerViewHolder setImageBitmap(int viewId, Bitmap bitmap) {        mHolderImpl.setImageBitmap(viewId, bitmap);        return this;    }    public RecyclerViewHolder setImageResource(int viewId, int resId) {        mHolderImpl.setImageResource(viewId, resId);        return this;    }    public RecyclerViewHolder setImageDrawable(int viewId, Drawable drawable) {        mHolderImpl.setImageDrawable(viewId, drawable);        return this;    }    public RecyclerViewHolder setImageDrawable(int viewId, Uri uri) {        mHolderImpl.setImageDrawable(viewId, uri);        return this;    }    @TargetApi(16)    public RecyclerViewHolder setImageAlpha(int viewId, int alpha) {        mHolderImpl.setImageAlpha(viewId, alpha);        return this;    }    public RecyclerViewHolder setChecked(int viewId, boolean checked) {        mHolderImpl.setChecked(viewId, checked);        return this;    }    public RecyclerViewHolder setProgress(int viewId, int progress) {        mHolderImpl.setProgress(viewId, progress);        return this;    }    public RecyclerViewHolder setProgress(int viewId, int progress, int max) {        mHolderImpl.setProgress(viewId, progress, max);        return this;    }    public RecyclerViewHolder setMax(int viewId, int max) {        mHolderImpl.setMax(viewId, max);        return this;    }    public RecyclerViewHolder setRating(int viewId, float rating) {        mHolderImpl.setRating(viewId, rating);        return this;    }    public RecyclerViewHolder setVisibility(int viewId, int visible) {        mHolderImpl.setVisibility(viewId, visible);        return this;    }    public RecyclerViewHolder setRating(int viewId, float rating, int max) {        mHolderImpl.setRating(viewId, rating, max);        return this;    }    public RecyclerViewHolder setOnClickListener(int viewId, View.OnClickListener listener) {        mHolderImpl.setOnClickListener(viewId, listener);        return this;    }    public RecyclerViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) {        mHolderImpl.setOnTouchListener(viewId, listener);        return this;    }    public RecyclerViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) {        mHolderImpl.setOnLongClickListener(viewId, listener);        return this;    }    public RecyclerViewHolder setOnItemClickListener(int viewId, AdapterView.OnItemClickListener listener) {        mHolderImpl.setOnItemClickListener(viewId, listener);        return this;    }    public RecyclerViewHolder setOnItemLongClickListener(int viewId, AdapterView.OnItemLongClickListener listener) {        mHolderImpl.setOnItemLongClickListener(viewId, listener);        return this;    }    public RecyclerViewHolder setOnItemSelectedClickListener(int viewId, AdapterView.OnItemSelectedListener listener) {        mHolderImpl.setOnItemSelectedClickListener(viewId, listener);        return this;    }}


viewHolder的桥接类


package com.diction.app.android.base.recycle_adapter;import android.annotation.TargetApi;import android.graphics.Bitmap;import android.graphics.drawable.Drawable;import android.net.Uri;import android.util.SparseArray;import android.view.View;import android.widget.AdapterView;import android.widget.Checkable;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.RatingBar;import android.widget.TextView;/** * Created by hgm on 2017/2/5. */public class ViewHolderImpl {    /**     * 缓存子视图,key为view id, 值为View。     */    private SparseArray<View> mCahceViews = new SparseArray<View>();    /**     * Item View     */    View mItemView;    /**     * @param itemView     */    ViewHolderImpl(View itemView) {        mItemView = itemView;    }    public View getItemView() {        return mItemView;    }    /**     * @param viewId     * @param <T>     * @return     */    public <T extends View> T findViewById(int viewId) {        View target = mCahceViews.get(viewId);        if (target == null) {            target = mItemView.findViewById(viewId);            mCahceViews.put(viewId, target);        }        return (T) target;    }    public void setText(int viewId, int stringId) {        TextView textView = findViewById(viewId);        textView.setText(stringId);    }    public void setText(int viewId, String text) {        TextView textView = findViewById(viewId);        textView.setText(text);    }    public void setTextColor(int viewId, int color) {        TextView textView = findViewById(viewId);        textView.setTextColor(color);    }    /**     * @param viewId     * @param color     */    public void setBackgroundColor(int viewId, int color) {        View target = findViewById(viewId);        target.setBackgroundColor(color);    }    /**     * @param viewId     * @param resId     */    public void setBackgroundResource(int viewId, int resId) {        View target = findViewById(viewId);        target.setBackgroundResource(resId);    }    /**     * @param viewId     * @param drawable     */    public void setBackgroundDrawable(int viewId, Drawable drawable) {        View target = findViewById(viewId);        target.setBackgroundDrawable(drawable);    }    /**     * @param viewId     * @param drawable     */    @TargetApi(16)    public void setBackground(int viewId, Drawable drawable) {        View target = findViewById(viewId);        target.setBackground(drawable);    }    public void setImageBitmap(int viewId, Bitmap bitmap) {        ImageView target = findViewById(viewId);        target.setImageBitmap(bitmap);    }    public void setImageResource(int viewId, int resId) {        ImageView target = findViewById(viewId);        target.setImageResource(resId);    }    public void setImageDrawable(int viewId, Drawable drawable) {        ImageView target = findViewById(viewId);        target.setImageDrawable(drawable);    }    public void setImageDrawable(int viewId, Uri uri) {        ImageView target = findViewById(viewId);        target.setImageURI(uri);    }    @TargetApi(16)    public void setImageAlpha(int viewId, int alpha) {        ImageView target = findViewById(viewId);        target.setImageAlpha(alpha);    }    public void setChecked(int viewId, boolean checked) {        Checkable checkable = findViewById(viewId);        checkable.setChecked(checked);    }    public void setProgress(int viewId, int progress) {        ProgressBar view = findViewById(viewId);        view.setProgress(progress);    }    public void setProgress(int viewId, int progress, int max) {        ProgressBar view = findViewById(viewId);        view.setMax(max);        view.setProgress(progress);    }    public void setMax(int viewId, int max) {        ProgressBar view = findViewById(viewId);        view.setMax(max);    }    public void setRating(int viewId, float rating) {        RatingBar view = findViewById(viewId);        view.setRating(rating);    }    public void setVisibility(int viewId, int visible) {        View view = findViewById(viewId);        view.setVisibility(visible);    }    public void setRating(int viewId, float rating, int max) {        RatingBar view = findViewById(viewId);        view.setMax(max);        view.setRating(rating);    }    public void setOnClickListener(int viewId, View.OnClickListener listener) {        View view = findViewById(viewId);        view.setOnClickListener(listener);    }    public void setOnTouchListener(int viewId, View.OnTouchListener listener) {        View view = findViewById(viewId);        view.setOnTouchListener(listener);    }    public void setOnLongClickListener(int viewId, View.OnLongClickListener listener) {        View view = findViewById(viewId);        view.setOnLongClickListener(listener);    }    public void setOnItemClickListener(int viewId, AdapterView.OnItemClickListener listener) {        AdapterView view = findViewById(viewId);        view.setOnItemClickListener(listener);    }    public void setOnItemLongClickListener(int viewId, AdapterView.OnItemLongClickListener listener) {        AdapterView view = findViewById(viewId);        view.setOnItemLongClickListener(listener);    }    public void setOnItemSelectedClickListener(int viewId, AdapterView.OnItemSelectedListener listener) {        AdapterView view = findViewById(viewId);        view.setOnItemSelectedListener(listener);    }}


0 0
原创粉丝点击