和ListView不一样的是,RecyclerView不再负责Item的摆放等显示方面的功能。所有和布局、绘制等方面的工作Google都其拆分成不同的类进行管理。也因为如此RecyclerView中没有对item的点击事件,下面我们来介绍一种在RecyclerView添加Item点击事件的方法。
在Adapter中实现
原理:
在ViewHolder中可以得到每个item的根布局,所以我们可以对根布局进行OnClick的监听,利用java的回调机制将这个监听公开给Adapter,这样就能够对RecyclerView设置ItemClickListener,不过这个Listener不是设置到RecyclerView上而是设置到Adapter。
具体实现步骤:
新建一个Adapter继承RecyclerView.Adapter<VH>,这里以MyAdapter为例:
- 定义一个接口:
public interface setOnItemClickListener{
void OnItemClickListener(int pos);
}
- 新建一个私有变量用于保存用户设置的监听器及其set方法:
private setOnItemClickListener mListener;
- 在View Holder中对每个Item的根布局实现监听
if(mListener!=null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.OnItemClickListener(position);
}
});
}
- 暴露一个方法供外界调用
public void setOnItemClickListener(OnItemClickListener mListener){
this.mListener=mListener;
}
- 外界调用
初始化MyAdapter后
mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void OnItemClickListener(int pos) {
// TODO;
}
});
网友评论