美文网首页
RecyclerView封装通用的方法

RecyclerView封装通用的方法

作者: it奔跑在路上 | 来源:发表于2018-10-30 16:31 被阅读0次

    对RecyclerView进行封装

    封装了点击事件,长按点击事件,直接CV大法即可
    public class MainActivity extends AppCompatActivity {
        private RecyclerView mRecyclerView;
        private List<String> mData = new ArrayList<>();
        private DragSwipeAdapter mAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mRecyclerView = (RecyclerView) findViewById(R.id.rv);
            init();
            addListener();
        }
    
        private void init() {
            for (int i = 0; i < 20; i++) {
                mData.add("item" + i);
            }
    
            mAdapter = new DragSwipeAdapter(this, mData);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
            mRecyclerView.setAdapter(mAdapter);
        }
    
        private void addListener() {
            mAdapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {
                    Toast.makeText(MainActivity.this, "click" + position, Toast.LENGTH_SHORT).show();
                }
            });
            mAdapter.setonLongItemClickListener(new BaseAdapter.onLongItemClickListener() {
                @Override
                public void onLongItemClick(View view, int postion) {
                    Toast.makeText(MainActivity.this, "long" + postion, Toast.LENGTH_SHORT).show();
    
                }
            });
        }
    }
    
    public class DragSwipeAdapter extends BaseAdapter<String> {
        public DragSwipeAdapter(Context mContext, List<String> mDatas) {
            super(mContext, mDatas);
        }
    
        @Override
        protected int generateLayoutId() {
            return R.layout.item;
        }
    
        @Override
        protected void convert(Context mContext, BaseViewHolder holder, String s) {
            holder.setText(R.id.tv,s);
        }
    }
    
    public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {
        private Context                 mContext;
        private List<T>                 mDatas;
        private int                     mLayoutId;
        private OnItemClickListener     mItemClickListener;
        private onLongItemClickListener mLongItemClickListener;
    
        public BaseAdapter(Context mContext, List<T> mDatas) {
            this.mContext = mContext;
            this.mDatas = mDatas;
            this.mLayoutId = generateLayoutId();
        }
    
        /**
         * 交给子类去实现,生成布局
         * @return
         */
        protected abstract int generateLayoutId();
    
        public void updateData(List<T> data) {
            mDatas.clear();
            mDatas.addAll(data);
            notifyDataSetChanged();
        }
    
        public void addAll(List<T> data) {
            mDatas.addAll(data);
            notifyDataSetChanged();
        }
    
    
        @Override
        public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(mContext).inflate(mLayoutId, parent, false);
            BaseViewHolder holder = new BaseViewHolder(view);
            return holder;
        }
    
        @Override
        public int getItemCount() {
            return mDatas.size();
        }
    
    
        @Override
        public void onBindViewHolder(BaseViewHolder holder, final int position) {
            convert(mContext, holder, mDatas.get(position));
            if (mItemClickListener != null) {
                holder.mItemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mItemClickListener.onItemClick(v, position);
                    }
                });
            }
            if (mLongItemClickListener != null) {
                holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        mLongItemClickListener.onLongItemClick(v, position);
                        return true;
                    }
                });
            }
        }
    
        protected abstract void convert(Context mContext, BaseViewHolder holder, T t);
    
    
        public    interface OnItemClickListener {
            void onItemClick(View view, int position);
        }
    
        public    interface onLongItemClickListener {
            void onLongItemClick(View view, int postion);
        }
    
        public void setOnItemClickListener(OnItemClickListener listener) {
            this.mItemClickListener = listener;
        }
    
        public void setonLongItemClickListener(onLongItemClickListener listener) {
            this.mLongItemClickListener = listener;
        }
    }
    
    
    public class BaseViewHolder extends RecyclerView.ViewHolder {
        SparseArray<View> mViews;
        View              mItemView;
    
        public BaseViewHolder(View itemView) {
            super(itemView);
            mItemView = itemView;
            mViews = new SparseArray<>();
        }
    
    
        public <T extends View> T getView(int viewId) {
            View view = mViews.get(viewId);
            if (view == null) {
                view = mItemView.findViewById(viewId);
                mViews.put(viewId, view);
            }
            return (T) view;
        }
    
        public BaseViewHolder setText(int viewId, int resId) {
            TextView textView = getView(viewId);
            textView.setText(resId);
            return this;
        }
    
    
        public BaseViewHolder setText(int viewId, String text) {
            TextView textView = getView(viewId);
            textView.setText(text);
            return this;
        }
    
        public BaseViewHolder setText(int viewId, SpannableStringBuilder text) {
            TextView textView = getView(viewId);
            textView.setText(text);
            return this;
        }
    
        public BaseViewHolder setImageResource(int viewId, int resId) {
            ImageView view = getView(viewId);
            view.setImageResource(resId);
            return this;
        }
    
        public BaseViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
            ImageView view = getView(viewId);
            view.setImageBitmap(bitmap);
            return this;
        }
    
        public BaseViewHolder setImageDrawable(int viewId, Drawable drawable) {
            ImageView view = getView(viewId);
            view.setImageDrawable(drawable);
            return this;
        }
    
        public BaseViewHolder setBackgroundColor(int viewId, int color) {
            View view = getView(viewId);
            view.setBackgroundColor(color);
            return this;
        }
    
        public BaseViewHolder setBackgroundResource(int viewId, int backgroundRes) {
            View view = getView(viewId);
            view.setBackgroundResource(backgroundRes);
            return this;
        }
    
        public BaseViewHolder setTextColor(int viewId, int textColor) {
            TextView view = getView(viewId);
            view.setTextColor(textColor);
            return this;
        }
    
    
        @SuppressLint("NewApi")
        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;
        }
    
        public BaseViewHolder setVisible(int viewId, boolean visible) {
            View view = getView(viewId);
            view.setVisibility(visible ? View.VISIBLE : View.GONE);
            return this;
        }
    
    
        public BaseViewHolder setTag(int viewId, Object tag) {
            View view = getView(viewId);
            view.setTag(tag);
            return this;
        }
    
        public BaseViewHolder setTag(int viewId, int key, Object tag) {
            View view = getView(viewId);
            view.setTag(key, tag);
            return this;
        }
    
        public BaseViewHolder setChecked(int viewId, boolean checked) {
            Checkable view = (Checkable) getView(viewId);
            view.setChecked(checked);
            return this;
        }
    
        /**
         * 关于事件监听
         */
        public BaseViewHolder setOnClickListener(int viewId, View.OnClickListener listener) {
    
            View view = getView(viewId);
            view.setOnClickListener(listener);
            return this;
        }
    
        public BaseViewHolder setOnTouchListener(int viewId, View.OnTouchListener listener) {
            View view = getView(viewId);
            view.setOnTouchListener(listener);
            return this;
        }
    
        public BaseViewHolder setOnLongClickListener(int viewId, View.OnLongClickListener listener) {
            View view = getView(viewId);
            view.setOnLongClickListener(listener);
            return this;
        }
    }
    

    activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
    
        <android.support.v7.widget.RecyclerView
            android:layoutAnimation="@anim/layoutanimation"
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        </android.support.v7.widget.RecyclerView>
    </LinearLayout>
    

    item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_margin="10dp"
        android:id="@+id/cardView"
        app:cardElevation="5dp"
        app:cardCornerRadius="5dp">
    
        <TextView
            android:textColor="@android:color/white"
            android:background="@android:color/holo_blue_light"
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:gravity="center" />
    </android.support.v7.widget.CardView>
    

    layoutanimation.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
        android:animationOrder="normal"
        android:animation="@anim/load_anim"
        android:delay="0.5">
    </layoutAnimation>
    

    load_anim.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="300">
        <alpha
            android:fromAlpha="0"
            android:toAlpha="1" />
        <translate
            android:fromYDelta="800"
            android:toYDelta="0" />
    </set>
    

    相关文章

      网友评论

          本文标题:RecyclerView封装通用的方法

          本文链接:https://www.haomeiwen.com/subject/vpwgtqtx.html