simple封装RecyclerView.Adapter

继承RecyclerView的Adapter适配器的封装,可以参考学习

有点击,长按,添加head,foot
,动态添加数据(上拉加载更多),刷新数据(下拉刷新)
上个代码:

public abstract class MagicRecyclerViewHFAdapter<T ,V extends MagicRecyclerViewHFAdapter.ItemHolder> extends RecyclerView.Adapter<RecyclerView.ViewHolder>  {
    private static final int TYPE_HEADER = 0;

    private static final int TYPE_FOOTER = 1;

    private static final int TYPE_ITEM = 2;

    private static final int TYPE_EMPTY = 3;

    private View mHeaderView;

    private View mFooterView;

    private View mEmptyView;

    public List<T> items;

    public Context mContext ;

    /**
     * 设置item布局
     * @return
     */
    public abstract int setLayoutItemID();

    /**
     * 设置item的ViewHolder 继承ItemHolder
     * @return
     */
    public abstract V addViewItemHolder(View v);


    /**
     * 设置item的数据
     * @return
     */
    public abstract  void onBindViewHolderT(RecyclerView.ViewHolder holder, int position, T dataItem);

    public OnItemClickLitener mOnItemClickLitener;

    public OnItemLongClickLitener mOnItemLongClickLitener;

    public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {
        this.mOnItemClickLitener = mOnItemClickLitener;
    }

    public void setOnItemLongClickLitener(OnItemLongClickLitener mOnItemLongClickLitener) {
        this.mOnItemLongClickLitener = mOnItemLongClickLitener;
    }

    public MagicRecyclerViewHFAdapter(Context mContext , List<T> data) {
        this.mContext = mContext;
        this.items = data;
    }

    @Override
    public  RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_ITEM) {
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(setLayoutItemID(), parent, false);
            final V holder = addViewItemHolder(v);
            if (mOnItemClickLitener != null) {
                holder.itemView.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View v){
                        int pos = holder.getLayoutPosition();
                        mOnItemClickLitener.onItemClickList(holder.itemView, pos);
                    }
                });
            }
            if (mOnItemLongClickLitener != null) {
                holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        int pos = holder.getLayoutPosition();
                        mOnItemLongClickLitener.onItemLongClickList(holder.itemView, pos);
                        return false;
                    }
                });
            }
            return holder;
        } else if (viewType == TYPE_HEADER) {
            View v = mHeaderView;
            return new HeaderHolder(v);
        } else if (viewType == TYPE_FOOTER) {
            View v = mFooterView;
            return new FooterHolder(v);
        } else if (viewType == TYPE_EMPTY) {
            View v = mEmptyView;
            return new EmptyHolder(v);
        }
        throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof ItemHolder) {
            T dataItem = getItem(position);
            onBindViewHolderT(holder,position ,dataItem);
        } else if (holder instanceof HeaderHolder) {

        } else if (holder instanceof FooterHolder) {

        } else if (holder instanceof EmptyHolder) {

        }
    }



    @Override
    public int getItemCount() {

        int count;
        int size = items.size();
        if (size == 0 && null != mEmptyView) {
            count = 1;
        } else {
            count = getHeadViewSize() + size + getFooterViewSize();
        }
        return count;

    }

    @Override
    public int getItemViewType(int position) {
        int size = items.size();
        if (size == 0 && null != mEmptyView) {
            return TYPE_EMPTY;
        } else if (position < getHeadViewSize()) {
            return TYPE_HEADER;
        } else if (position >= getHeadViewSize() + items.size()) {
            return TYPE_FOOTER;
        }
        return TYPE_ITEM;
    }

    public int getHeadViewSize() {
        return mHeaderView == null ? 0 : 1;
    }

    public int getFooterViewSize() {
        return mFooterView == null ? 0 : 1;
    }

    public T getItem(int position) {
        return items.get(position - getHeadViewSize());
    }



    //add a header to the adapter
    public void addHeader(View header) {
        mHeaderView = header;
        notifyItemInserted(0);
    }

    //remove a header from the adapter
    public void removeHeader(View header) {
        notifyItemRemoved(0);
        mHeaderView = null;
    }

    //add a footer to the adapter
    public void addFooter(View footer) {
        mFooterView = footer;
        notifyItemInserted(getHeadViewSize() + items.size());
    }

    //remove a footer from the adapter
    public void removeFooter(View footer) {
        notifyItemRemoved(getHeadViewSize() + items.size());
        mFooterView = null;
    }

    //add data
    public void addDatas(List<T> data) {
        items.addAll(data);
        notifyItemInserted(getHeadViewSize() + items.size() - 1);
    }

    //add data
    public void addData(T data) {
        items.add(data);
        notifyItemInserted(getHeadViewSize() + items.size() - 1);
    }

    //refresh data
    public void refreshData(List<T> datas){
        items.clear();
        addDatas(datas);
    }

    public void setEmptyView(View emptyView) {
        mEmptyView = emptyView;
        notifyItemInserted(0);
    }

    public interface OnItemClickLitener{
        void onItemClickList(View view, int position);
    }
    public interface OnItemLongClickLitener{
        void onItemLongClickList(View view, int position);
    }



    public class ItemHolder<T> extends RecyclerView.ViewHolder {
        public ItemHolder(View itemView) {
            super(itemView);
        }
    }

    public class HeaderHolder<T> extends RecyclerView.ViewHolder {
        public HeaderHolder(View itemView) {
            super(itemView);
        }
    }

    class FooterHolder<T> extends RecyclerView.ViewHolder {
        public FooterHolder(View itemView) {
            super(itemView);
        }
    }

    class EmptyHolder<T> extends RecyclerView.ViewHolder {
        public EmptyHolder(View itemView) {
            super(itemView);
        }
    }
}

使用:

CustomShopRecyclerViewHFAdapter :设置自己的entity

public class CustomShopRecyclerViewHFAdapter<String> extends MagicRecyclerViewHFAdapter {


    public CustomShopRecyclerViewHFAdapter(Context mContext, List data) {
        super(mContext, data);
    }

    @Override
    public int setLayoutItemID() {
        return R.layout.adapter_shop_item;
    }

    @Override
    public ShopItemHolder addViewItemHolder(View view) {
        return new ShopItemHolder(view);
    }

    @Override
    public void onBindViewHolderT(RecyclerView.ViewHolder holder, int position, Object dataItem) {
        ((ShopItemHolder) holder).tv_content.setText("lmz,这个味确实");
        Glide.with(mContext).load("http://www.32190.com/images/goods/20130702/5ec240a4f8a31693.gif").into(((ShopItemHolder) holder).mImage);
    }


    //继承这个holder
    public class ShopItemHolder<T> extends ItemHolder {

        ImageView mImage;
        TextView tv_content;
        TextView tv_price;
        TextView tv_num;

        public ShopItemHolder(View mView) {
            super(mView);
            mImage = (ImageView) mView.findViewById(R.id.shop_img);
            tv_content = (TextView) mView.findViewById(R.id.shop_content);
            tv_price = (TextView) mView.findViewById(R.id.shop_price);
            tv_num = (TextView) mView.findViewById(R.id.shop_num);
        }
    }
}

在补充一下,判断加载到了底部:

public class RecyclerViewUtils {
    LoadingData data;
    public void loadingData(LoadingData data){
        this.data  = data ;
    };
    public interface LoadingData {

        void onLoadMore();

    }
    public static void OnScrollListener(final LoadingData data, RecyclerView recyclerView) {


        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

            boolean isSlidingToLast = false;

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

                LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();

                if (newState == RecyclerView.SCROLL_STATE_IDLE) {

                    int lastVisibleItem = manager.findLastCompletelyVisibleItemPosition();

                    int totalItemCount = manager.getItemCount();

                    if (lastVisibleItem == (totalItemCount - 1) && !isSlidingToLast) {

                        data.onLoadMore();//当滑动到底部的时候触动这个方法


                    }
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                if (dx > 0) {

                    isSlidingToLast = true;

                } else {

                    isSlidingToLast = false;

                }

            }
        });
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值