**对于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);
}
}
}
初步尝试写博客
有什么不对的地方或者更好的方法希望一起讨论一下