RecyclerView the Universal Adapter

See online writing universal template, seeking to improve

package com.lcj.demo1.adapter;

import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 *
 * RecyclerView的万能适配器模板
 */
public abstract class CommonAdapter<T> extends RecyclerView.Adapter<CommonAdapter.VH> {

    private List<T> mData;

    public CommonAdapter() {

    }

    public CommonAdapter(List<T> mData) {
        this.mData = mData;
    }

    public abstract int getLayoutId(int viewType);

    @Override
    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
        // 要根据不同的ViewType来封装对应的ViewHolder
        return VH.get(parent, getLayoutId(viewType));
    }

    @Override
    public void onBindViewHolder(VH holder, int position) {
        convert(holder, mData.get(position), position);
    }

    /**
     * 往View上填充数据
     * @param holder
     * @param data
     * @param position
     */
    public abstract void convert(VH holder, T data, int position);

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public static class VH extends RecyclerView.ViewHolder {

        private SparseArray<View> mViews;
        private View mConvertView;

        public VH(View itemView) {
            super(itemView);
            mConvertView = itemView;
        }

        public static VH get(ViewGroup parent, int layoutId) {
            View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
            return new VH(view);
        }

        public <T extends View> T getView(int id) {
            View view = mViews.get(id);
            if (view == null) {
                view = mConvertView.findViewById(id);
                mViews.put(id, view);
            }
            return (T) view;
        }


        /**
         * 填充对应控件的方法   可以写n多个
         * @param id
         * @param str
         */
        public void setText(int id, String str) {
            TextView view = getView(id);
            view.setText(str);
        }

        public void setImage(int id, int imageId) {
            ImageView view = getView(id);
            view.setImageResource(imageId);
        }

        // ...

    }
}




Guess you like

Origin blog.csdn.net/reuxfhc/article/details/89424303