简单的封装BaseRecycleviewAdapter
2016-11-23 10:14
435 查看
**对于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); } } }
初步尝试写博客
有什么不对的地方或者更好的方法希望一起讨论一下相关文章推荐
- android RecycleView Adapter简单封装
- [置顶] 超级简单RecycleViewAdapter的封装-支持多视图,多点击回调
- BaseRecyclerViewAdapterHelper源码解读(一) 封装简单的adapter和万能的BaseViewHolder
- 超级简单RecycleViewAdapter的封装-支持多视图,多点击回调
- 超级简单RecycleViewAdapter的封装-支持多视图,多点击回调
- android RecycleView Adapter简单封装
- android RecycleView Adapter简单封装
- BaseRecycleViewAdapter的封装,基于多种bean数据源的呈现
- RecyclerView Adapter简单封装
- 对BaseAdapter和ViewHolder的封装
- RecycleView + SwipeRefreshLayout 对adapter和刷新的封装
- Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用
- RecycleView使用和adapter基本封装
- 简单封装RecyclerView的Adapter
- Android 之BaseRecyclerAdapter简单封装之路
- 封装RecyclerView的基础适配器BaseAdapter
- Android开发之ButterKnife,GreenDao简单运用,以及推荐并使用一个好用的开源库BaseRecyclerViewAdapterHelper。
- Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用
- 自定义封装了ViewHolder的BaseAdapter,简化了Adapter的编写
- BaseAdapter的简单封装