概述

RecyclerView本身没有实现点击事件,需要自定义接口进行实现

接口定义

onRecyclerViewItemClickListener

接口名称随自己喜欢起,放置的位置也随你喜欢,因为是 public 放哪都能调用到
方法参数上这里考虑可能会对布局进行调整,传入了父控件和当前item以及索引位置

public interface onRecyclerViewItemClickListener{void onItemClick(RecyclerView parent, View view, int position);void onItemLongClick(RecyclerView parent, View view, int position);
}

如果想要一个接口管理一个监听事件回调,也可以单独弄一个定义接口文件,更规范些
事件参数也可以根据需要进行调整,如果没有特别需要,只要拿到item索引位置即可

public interface IAdapter {/** Item 单击事件后续处理*/interface OnRVItemClickListener {void onClick(int position);}/** Item 长按事件后续处理*/interface OnRVItemLongClickListener {boolean onLongClick(int position);}/** Item 移除事件后续处理*/interface OnRVItemRemoveListener{void onRemove(int position);}
}

以上如果看不明白,那接口这个概念就需要再翻看一下了

Adapter

接下来就要改造这个Adapter了

初始化接口事件

 //初使化自定义的接口,接口定义在哪个包下就会把哪个包名也引入进来,只是名字长点,不影响使用private pub.onRecyclerViewItemClickListener onRecyclerViewItemClickListener;//为了方便接口函数传值,这里把RecyclerView控件拉出来,如果接口方法参数列表里没有,可以不用写private RecyclerView rvParent;

绑定接口回调事件

 //定义一个公用方法,可以在Activity中来绑定接口事件public void setOnItemClickListener(pub.onRecyclerViewItemClickListener onRecyclerViewItemClickListener) {this.onRecyclerViewItemClickListener = onRecyclerViewItemClickListener;}

绑定控件监听

这里有两种实现方式

直接给控件绑定监听事件

代码中的写法可以不作参考,具体看你想要给某个控件进行绑定监听还是给整个item绑定监听,和正常控件绑定没啥判别
只是具体的事件内容改为调用监听接口事件的方法即可
别忘了把参数传进去给外部调用时使用

 @Overridepublic void onBindViewHolder(@NonNull viewHolder holder, int position) {holder.bind(lstCharges.get(position));holder.mView.getRoot().setOnClickListener(view -> itemClickListener.onClick(position));holder.mView.getRoot().setOnLongClickListener(view -> itemLongClickListener.onLongClick(position));  }

比较推荐这种写法,至于为什么:简单!

继承 View.OnClickListener

另一个就是在你的类名之后 implements 一个 View.OnClickListener 然后重写 onClick 方法

public class FileAdapter extends RecyclerView.Adapter<FileAdapter.myViewHolder> implements View.OnClickListener {

此时会报错提示要重载 onClick事件

使用这种方法,在此获取不到当前的索引位置,
可以定义一个 int 公用变量来存储更新,
也可以如上面把 RecyclerView 拉出来,通过当前view来查找索引位置
具体看自己喜好,这里只作一个演示

 //重载点击事件,指定点击事件时执行自定义的onItemClick@Overridepublic void onClick(View view) {//此时就用到上面拉出来的那个 rvParent 了int position = rvParent.getChildAdapterPosition(view);if (onRecyclerViewItemClickListener != null)onRecyclerViewItemClickListener.onItemClick(rvParent, view, position);}

只是设定监听事件了,但没有指定监听事件给谁,那点击之后是不会有反应的,还需要在 onCreateViewHolder 中绑定监听事件

    @NonNull@Overridepublic myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//指定一个父控件,把 RecyclerView 拉出来供 onClick 事件使用rvParent = (RecyclerView) parent;View view = LayoutInflater.from(mContext).inflate(R.layout.file_manager_item, parent, false);//绑定监听点击事件,因为类本身 implement 了 View.OnClickListener 此时只要监听绑定到 this 就可以了view.setOnClickListener(this);return new myViewHolder(view, mContext);}

完整代码
下面给出了完整的代码,中间无关的信息省略了

public class FileAdapter extends RecyclerView.Adapter<FileAdapter.myViewHolder> implements View.OnClickListener {...private pub.onRecyclerViewItemClickListener onRecyclerViewItemClickListener;private RecyclerView rvParent;...@NonNull@Overridepublic myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//指定一个父控件rvParent = (RecyclerView) parent;View view = LayoutInflater.from(mContext).inflate(R.layout.file_manager_item, parent, false);//绑定监听点击事件view.setOnClickListener(this);return new myViewHolder(view, mContext);}...//重载点击事件,指定点击事件时执行自定义的onItemClick@Overridepublic void onClick(View view) {int position = rvParent.getChildAdapterPosition(view);if (onRecyclerViewItemClickListener != null)onRecyclerViewItemClickListener.onItemClick(rvParent, view, position);}...//实例化自定义接口public void setOnItemClickListener(pub.onRecyclerViewItemClickListener onRecyclerViewItemClickListener) {this.onRecyclerViewItemClickListener = onRecyclerViewItemClickListener;}
}

Activity

接下来和正常ListView绑定监听事件的操作差不多

fileAdapter.setOnItemClickListener(new pub.onRecyclerViewItemClickListener() {@Overridepublic void onItemClick(RecyclerView parent, View view, int position) {//自定义点击后的功能事件 .../* 此处代码仅供参考,演示怎样调用当前item的信息mView.tvFmPath.setText(lstFiles.get(position).getFilePath());getPath(lstFiles.get(position).getFilePath());fileAdapter.notifyDataSetChanged();*/}@Overridepublic void onItemLongClick(RecyclerView parent, View view, int position) {//自定义长按后的功能事件 ...}});

RecyclerView实现Item点击事件相关推荐

  1. 从源码角度入手实现RecyclerView的Item点击事件

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6758373.html RecyclerView 作为 ListView 和 GridView 的替代产物, ...

  2. Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件

    1. 引言: RecyclerView侧重的是布局的灵活性,虽说可以替代ListView但是连基本的点击事件都没有,这篇文章就来详细讲解如何为RecyclerView的item添加点击事件,顺便复习一 ...

  3. RecyclerView条目item点击事件---放大

    Adapter–创建接口 //创建接口public interface RecyInterface{void vh(Viewholder viewholder);}//声明接口名private Rec ...

  4. android recyclerview item点击事件,RecyclerView的Item的单击事件

    RecyclerView 的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为RecyclerView添加单击事件参考如下: ...

  5. android 点击item跳转页面,Android RecyclerView Item 点击事件,简单

    在适配器中设置项的点击事件即可,如需跳转Activity,则需要intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_ ...

  6. RecyclerView 的 Item 的单击事件

    RecyclerView 的每个Item的点击事件并没有像 ListView 一样封装在组件中,需要 Item 的单击事件时就需要自己去实现,在 Adapter 中为RecyclerView 添加单击 ...

  7. android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)...

    1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为        2,为了使LISTVIEW的ITEM在点 ...

  8. ListView的Item点击事件(消息传递)

    转载请保留原文出处"http://my.oschina.net/gluoyer/blog",谢谢! 您可以到博客的"友情链接"中,"程序猿媛(最新下载 ...

  9. android listview里item添加一个按钮点击事件,ListView Item点击事件跳转详情界面

    有好久都没有碰安卓了,考试加五一双组合也真是让人蛋疼.好在都平安的度过了,所以又有时间gun回来弄弄我的小博客(虽然没多少人看= =).看了之前做的几个小demo,模式都差不多,但是每次写的时候都要在 ...

最新文章

  1. python定义一个空数组_python – 在numpy数组中设置空值
  2. Google 全球员工围攻 Google!
  3. bootstrap fileinput上传返回400,404,500 等错误替换
  4. OpenCV访问Mat图像中每个像素的值
  5. 剑指offer九:变态跳台阶
  6. hdu1166敌兵布阵 树状数组裸题
  7. C语言 | 基于STM32的MPU6050模块程序(主程序)
  8. kali linux 截图位置,Kali Linux中使用截图工具
  9. 搞定常见垃圾收集器【Java】
  10. vue :key的说明 看到这文章,解决你的疑问
  11. uni一t 说明书_不输特斯拉,站在UNI-T背后的长安「超级工厂」
  12. ajax 同步和异步的区别
  13. 二维树状数组 探索进行中
  14. Swift实现LRU缓存淘汰算法
  15. 使用云开发实现微信支付的具体方法
  16. 局域网内和局域网间的通信(交换机与路由器)
  17. 中艺人脸识别考勤机使用方法_中控人脸识别考勤机说明书 人脸识别考勤机的使用方法...
  18. php studay,studay是什么意思
  19. 网络编程之(转载自:https://www.cnblogs.com/clschao/articles/9593164.html)
  20. Docker架设服务器系列

热门文章

  1. [UTCTF2020]basic-crypto
  2. 贪心算法经典问题:硬币找零
  3. leetcode 658. 找到 K 个最接近的元素
  4. 大疆无人机直播延迟的解决对策
  5. ios系统更新提示没有连接到服务器上,ios 更新时不再连接到无线网
  6. 二叉树前序、中序、后序遍历-1
  7. 桔梗网导航怎么取消?? so-easy
  8. Python之基础详解(十一):PTL各模块讲解:Image、ImageFilter、ImageChops、ImageColor、ImageEnhance、ImageOps、ImageDraw
  9. Linux查看端口监听状态
  10. invalid bound statement (not found)最全面的解决办法