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

RecyclerView的BaseAdapter的用法与条目监听的书写

2016-03-25 18:06 489 查看
         Android api22之后,Google推出了很多新控件,其中recyclerview作为listview的替代控件而受到很多开发者的青睐。其最主要的原因就是RecyclerView应用起来更为方便,也更加的灵活。

       关于RecyclerView的使用,网上有很多相关的帖子,介绍的也很详细。在这里我就不在一一赘述了。这篇帖子,主要讲的是RecyclerView的BaseAdapter的使用,以及RecyclerView的条目监听事件的设置。

       相比较于ListView,RecyclerView无论从条目排列方式,还是从布局管理上都要优秀很多。但是不知道为什么,Google没有为RecyclerView设置提条目监听事件。所以,就需要开发者们自己去添加条目监听。这种情况下,就用到的BaseAdapter。

public class BaseRecyclerViewAdapter extends RecyclerView.Adapter<BaseRecyclerViewAdapter.BaseViewHolder> {

protected LayoutInflater layoutInflater = null ;
private Context context ;
//创建接口对象
private ICallBack onItemListener ;

public BaseRecyclerViewAdapter(Context context, ICallBack callBack) {
this.context = context;
this.layoutInflater = LayoutInflater.from(context);
}
public BaseRecyclerViewAdapter(Context context) {
this.context = context;
this.layoutInflater = LayoutInflater.from(context);
}

/**
* 初始化接口对象
*/
public void setOnItemClickListener(ICallBack listener) {
this.onItemListener = listener;
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

return null;
}

@Override
public void onBindViewHolder(BaseViewHolder holder, int position) {

}

@Override
public int getItemCount() {
return 0;
}

protected class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

private int position ;
public BaseViewHolder(View itemView ,Context context  ) {
super(itemView);
if (context instanceof ICallBack){
onItemListener = (ICallBack) context;
}
itemView.setOnClickListener(this);
}

public void setPosition(int position) {
this.position = position;
}

@Override
public void onClick(View v) {
if (onItemListener != null ){
onItemListener.OnItemClickListener(v,  v.getTag() , position);
}
}
}

/***
* 定义ICallBack接口,实现条目点击监听
*/
public  interface ICallBack{
void  OnItemClickListener(View v,  Object o , int position);
}
}


在上述代码中,BaseAdapter类初始化了LayoutInflater;并且绑定了BaseViewHolder,而在BaseViewHolder中,通过

itemView.setOnClickListener(this);


绑定了每个itemView的点击监听事件,当然,如果想要添加长按事件的话,只需要添加

itemView.setOnLongClickListener(this);

并实现该接口中的方法就可以了。

其中在BaseViewHolder中,添加了

public void setPosition(int position) {
this.position = position;
}

这个方法的作用在于,在BaseAdapter的子类中可以再onBindViewHolder(BaseViewHolderholder,int
position)中通过holder.setPosition(position);的方式获取到条目的下标值。这样就可以区分不同条目的点击事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息