带model,vh适配器基类

public abstract class BaseModelRVAdapter<T, K extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<K> {

    private OnItemClickListener onItemClickListener;
    private OnClickListener onClickListener;

    protected LayoutInflater inflater;
    protected Context context;
    protected List<T> listData;

    public BaseModelRVAdapter(Context context, List<T> listData) {
        this.context = context;
        this.listData = listData;
        this.inflater = LayoutInflater.from(context);
        initListener();
    }

    /**
     * 初始化listener
     */
    private void initListener() {
        onClickListener = new OnClickListener() {
            @Override
            public void onClick(int position, long itemId) {
                if (onItemClickListener != null)
                    onItemClickListener.onItemClick(position, itemId);
            }
        };
    }

    @Override
    public K onCreateViewHolder(ViewGroup parent, int viewType) {
        final K holder = onCreateCustomViewHolder(parent, viewType);
        if (holder != null) {
            holder.itemView.setTag(holder);
            holder.itemView.setOnClickListener(onClickListener);
        }
        return holder;
    }

    @Override
    public void onBindViewHolder(K holder, int position) {
        if (null == holder) return;
        onBindCustomViewHolder(holder, position);
    }

    @Override
    public int getItemCount() {
        return null == listData ? 0 : listData.size();
    }

    public abstract K onCreateCustomViewHolder(ViewGroup parent, int viewType);

    public abstract void onBindCustomViewHolder(K h, int position);


    public interface OnItemClickListener {
        void onItemClick(int position, long itemId);
    }

    /**
     * 添加项点击事件
     *
     * @param onItemClickListener the RecyclerView item click listener
     */
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    /**
     * 可以共用同一个listener,相对高效
     */
    public static abstract class OnClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            RecyclerView.ViewHolder holder = (RecyclerView.ViewHolder) v.getTag();
            onClick(holder.getAdapterPosition(), holder.getItemId());
        }

        public abstract void onClick(int position, long itemId);
    }

}
posted @ 2018-12-17 09:17  journeyIT  阅读(41)  评论(0)    收藏  举报