您的位置:首页 > 移动开发 > Android开发

简单的封装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