简单的封装BaseRecycleviewAdapter

本文介绍如何简单封装BaseRecycleviewAdapter,适用于结合SwipeLayout的Recycleview,处理子View点击事件和上拉加载更多逻辑。提供了一个基本使用示例。
摘要由CSDN通过智能技术生成

**对于recycleviewadapter的简单封装,用于recycleview 和swiplayout 结合使用的时候,itemview 里面的子view 的点击监听事件 接口处理,上拉加载更多的条件处理

代码块

相关的代码模块例如:

public abstract class BaseRecyclerViewAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    public Context context;
    public List<T> list;
    public OnItemClickListener onItemClickListener;
    public OnLoadMoreListener onLoadMoreListener;
    public OnItemLongClickListener onItemLongClickListener;

    private boolean isLoading;
    private int visibleThreshold = 5;
    private int lastVisibleItem, totalItemCount;

    public BaseRecyclerViewAdapter(Context context, @NonNull List<T> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    final public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(getLayoutId(), parent, false);
        return getViewHolder(view);
    }

    @LayoutRes
    protected abstract int getLayoutId();

    @NonNull
    protected abstract RecyclerView.ViewHolder getViewHolder(View view);

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

    final public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    final public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
        this.onItemLongClickListener = onItemLongClickListener;
    }

    @Override
    final public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (onItemClickListener != null) {
            onItemClick(holder, position);
        }
        if (onItemLongClickListener != null) {
            onItemLongClick(holder, position);
        }

        onBindView(holder, position);
    }

    /**
     * 长按点击事件重写
     *
     * @param holder
     * @param position
     */
    @Deprecated
    protected void onItemLongClick(RecyclerView.ViewHolder holder, int position) {

    }

    /**
     * item有点击事件重写
     *
     * @param holder
     */
    @Deprecated
    protected void onItemClick(RecyclerView.ViewHolder holder, int position) {

    }

    /**
     * 传入需要点击的view
     * 用for循环 个体itemView里面的子view 设置点击事件
     * @param position
     * @param views
     */
    final protected void setOnItemClick(final int position, View... views) {
        if (onItemClickListener != null)
            for (View view : views) {
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onItemClickListener.onItemClick(position, v);
                    }
                });
            }
    }

    /**
     * 传入长按的view
     *
     * @param position
     * @param views
     */
    final protected void setOnItemLongClick(final int position, View... views) {
        if (onItemLongClickListener != null)
            for (View view : views) {
                view.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        onItemLongClickListener.onItemLongClick(position, v);
                        return true;
                    }
                });
            }
    }

    protected abstract void onBindView(RecyclerView.ViewHolder holder, int position);

    final public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener, RecyclerView recyclerView) {
        this.onLoadMoreListener = onLoadMoreListener;
        attachRecyclerView(recyclerView);
    }

    private void attachRecyclerView(RecyclerView recyclerView) {
        if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
            final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
            recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);
                    totalItemCount = getItemCount();
                    lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
                    if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold) && dy > 0) {
                        if (onLoadMoreListener != null) {
                            onLoadMoreListener.onLoadMore();
                        }
                        isLoading = true;
                    }
                }
            });
        }
    }

    public void setLoaded(boolean isLoading) {
        this.isLoading = isLoading;
    }
}

BseRecyclerViewAdater 基本只用例子

    public class CollectGoodsAdapter extends BaseRecyclerViewAdapter<Favorite> {

    public CollectGoodsAdapter(Context context, List<Favorite> list) {
        super(context, list);
    }

    @Override
    public int getLayoutId() {
        return R.layout.item_collect_good;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder getViewHolder(View view) {
        return new ViewHolder(view);
    }

    @Override
    public void onBindView(RecyclerView.ViewHolder holder, int position) {
        ViewHolder viewHolder = (ViewHolder) holder;
        Favorite favorite = list.get(position);
        viewHolder.tvGoodsName.setText(favorite.goodName);
        viewHolder.tvGoodsPrice.setText("¥" + favorite.goodPrice);//代购价格
        if (favorite.counterPrice == 0) {  //国内市场价
            viewHolder.tvGoodsMarketPrice.setVisibility(View.GONE);
        } else {
            viewHolder.tvGoodsMarketPrice.setVisibility(View.VISIBLE);
            viewHolder.tvGoodsMarketPrice.setText("¥" + favorite.counterPrice);
        }
        viewHolder.tvGoodsSellCount.setText("月销" + favorite.goodSellCount + "笔");//成交量

    }

/**
* item中的子view设置监听
*/
    @Override
    public void onItemClick(RecyclerView.ViewHolder holder, final int position) {
        super.onItemClick(holder, position);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onItemClickListener.onItemClick(position, v);
            }
        });
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        @Bind(R.id.tv_goods_price)
        TextView tvGoodsPrice;
        @Bind(R.id.tv_goods_market_price)
        TextView tvGoodsMarketPrice;
        @Bind(R.id.tv_goods_sell_count)
        TextView tvGoodsSellCount;
        @Bind(R.id.viewline)
        View viewline;

        public ViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }

}

初步尝试写博客

有什么不对的地方或者更好的方法希望一起讨论一下


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值