为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();//好像是可以了,我好烦啊
    }
});

这样就可以啦,运行看看吧~~

猜你喜欢

转载自www.cnblogs.com/oreox/p/10818515.html