Recycleview是一款很强大的控件,但是使用过的同学可能会发现它并没有自带的点击事件,如果想要给item添加点击事件要怎么做呢,其实可以用接口回调的方法去完成。
一、首先定义一个接口的方法
我们可以直接以内部类的形式在Adapter 中实现,也可以单独定义一个接口类
public interface OnItemClickListener {
void onItemClick(View view, int position);
void onItemLongClick(View view, int position);
}
二、在adapter中初始化接口
private OnItemClickListener mOnItemClickListener;
三、在onBindViewHolder中将item点击事件接口传递进去,让接口方法去处理点击事件的逻辑
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(v, position);
}
}
});
这样的话点击item实际上调用的接口的方法,具体接口方法需要做什么操作逻辑就在调用的时候去写了
四、定义一个接口回调的方法给外部调用
1、这里面常用的写法有写一个带参数的set 方法将第二步定义的接口对象传递进去
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
然后在acitvity 中通过adapter 的对象去回调
adapter.setOnItemClickListener(new OnItemClickListener)
2、或者将OnItemClickListener 接口对象传到adapter的构造函数中去,这样只要实例化adapter对象就会回调了。
public RecycleviewAdapter(Context context, List<RecycleViewItemCategory> list,OnItemClickListener onItemClickListener) {
this.context = context;
this.datalist = list;
this.mOnItemClickListener =onItemClickListener;
this.layoutInflater = LayoutInflater.from(context);
}
以上就是接口回调的步骤,很简单的也很实用。