为RecyclerView的item设置点击事件
最近做了一个这个RecyclerView的item设置点击事件,记录一下:
一、首先呢,是因为RecyclerView没有像ListView那样直接已经提供了OnItemClick或者OnItemLongClick等事件回调接口,所以需要自己来写一个;
我是随便在activity或者fragment中看得顺眼的地方声明了一个接口,
//也可以不在这个activity或者是fragment中来声明接口,可以在项目中单独创建一个interface,就改成
public static interface OnItemClickListener 就OK
,如下:
/** * 定义RecyclerView选项单击事件的回调接口 */ public interface OnItemClickListener{//也可以不在这个activity或者是fragment中来声明接口,可以在项目中单独创建一个interface,就改成static就OK //参数(父组件,当前单击的View,单击的View的位置,数据) void onItemClick(RecyclerView parent,View view, int position, Map data); // void onItemLongClick(View view);类似,我这里没用就不写了 // //这个data是List中放的数据类型,因为我这里是private List<Map> mapList;这样一个 //然后我的每个item是这样的: // HashMap map =new HashMap(); // map.put("img",R.drawable.delete); // map.put("text","x1"); //所以我的是map类型的,那如果是item中只有text的话比如List<String>,那么data就改成String类型 }
二、有了这个接口呢,我们要去实现这个接口,那么先声明一下,就在你的adapter里声明,下面这样:
private OnItemClickListener onItemClickListener;//声明一下这个接口 //提供setter方法 public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener; }
贴一下坐标:
三、这里为你自定义的adapter实现一下View.OnClickListener接口,首先在OnCreateViewHolder中设置一个监听器,然后就是重写onClick方法
view.setOnClickListener(this);//设置监听器
@Override public void onClick(View v) { //根据RecyclerView获得当前View的位置 int position = rv.getChildAdapterPosition(v); //程序执行到此,会去执行具体实现的onItemClick()方法 if (onItemClickListener!=null){ onItemClickListener.onItemClick(rv,v,position,mapList.get(position)); } }
这个也贴一下坐标吧:
四、快结束了!在Activity或者Fragment中通过Adapter设置每个Item的单击事件:
myAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(RecyclerView parent, View view, int position, Map data) { Toast.makeText(getContext(),"你碰到我!"+position, Toast.LENGTH_SHORT).show();//好像是可以了,我好烦啊 } });
这样就可以啦,运行看看吧~~