Recycler base 适配器

public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

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

    public List<T> getListData() {
        return listData;
    }

    public void setListData(List<T> listData) {
        this.listData = listData;
    }

    private OnItemClickListener onItemClickListener;
    private OnClickListener onClickListener;

    public BaseRecyclerAdapter(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 RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        final RecyclerView.ViewHolder holder = onCreateCustomViewHolder(parent, viewType);
        if (holder != null) {
            holder.itemView.setTag(holder);
//            holder.itemView.setOnLongClickListener(onLongClickListener);
            holder.itemView.setOnClickListener(onClickListener);
        }
        return holder;
    }

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

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

    public abstract RecyclerView.ViewHolder onCreateCustomViewHolder(ViewGroup parent, int viewType);

    public abstract void onBindCustomViewHolder(RecyclerView.ViewHolder 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);
    }

    public void replaceItem(T item){
        if (null!=listData){
            listData.clear();
            listData.add(item);
        }
    }

    public void replaceItem(List<T> items){
        if (null!=listData){
            listData.clear();
            listData.addAll(items);
        }
    }

    public void addItem(T item) {
        if (null != listData) listData.add(item);
    }

    public void addItem(List<T> items) {
        if (null != listData) listData.addAll(items);
    }

    public void deleteItem(int position) {
        if (null != listData && null != listData.get(position)) listData.remove(position);
    }

    public void deleteItem(T item) {
        if (null != listData) listData.remove(item);
    }

    public void clearItem(){
        if (null!=listData) listData.clear();
    }

    public void refresh(){
        notifyItemChanged(listData.size()-1);
    }
}
posted @ 2018-12-17 09:16  journeyIT  阅读(36)  评论(0)    收藏  举报