Android RecyclerView Item点击事件

2023-05-16

RecyclerView控件出来后可以代替ListView,功能更强大,但是RecyclerView却没有ListView的setOnItemClickListener和setOnLongClickListener方法,这里仿照ListView实现其Item点击事件;
 第一步:RecyclerView为我们提供了OnItemTouchListener监听,所以写一个类实现RecyclerView.OnItemTouchListener,如:
 
 /**
 * Created by zyt on 2017/5/19.
 * 实现RecyclerView的点击监听
 */
public class ItemClickListener implements RecyclerView.OnItemTouchListener {


    private GestureDetector mGestureDetector;
    private OnItemClickListener mListener;


    //内部接口,定义点击方法以及长按方法
    public interface OnItemClickListener {
        void onItemClick(View view, int position);


        void onItemLongClick(View view, int position);
    }


    public ItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
        mListener = listener;
        mGestureDetector = new GestureDetector(context,
                new GestureDetector.SimpleOnGestureListener() { //这里选择SimpleOnGestureListener实现类,可以根据需要选择重写的方法
                    //单击事件
                    @Override
                    public boolean onSingleTapUp(MotionEvent e) {
                        View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
                        if (childView != null && mListener != null) {
                            mListener.onItemClick(childView, recyclerView.getChildLayoutPosition(childView));
                            return true;
                        }
                        return false;
                    }


                    //长按事件
                    @Override
                    public void onLongPress(MotionEvent e) {
                        View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
                        if (childView != null && mListener != null) {
                            mListener.onItemLongClick(childView, recyclerView.getChildLayoutPosition(childView));
                        }
                    }
                });
    }


    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        //把事件交给GestureDetector处理
        if (mGestureDetector.onTouchEvent(e)) {
            return true;
        } else
            return false;
    }


    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {
    }


    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
    }
}
第二步就是调用了:
mRecyclerView.addOnItemTouchListener(new ItemClickListener(this, mRecyclerView, new ItemClickListener.OnItemClickListener() {
		@Override
		public void onItemClick(View view, int position) {
		//这里就可以处理Item点击逻辑
		}


		@Override
		public void onItemLongClick(View view, int position) {
		//这里就可以处理Item的长按逻辑
		}
	}));
}


到这里就算结束了,以后使用就方便多了;
最后这里提下,使用RecyclerView时必须设置mRecyclerView.setLayoutManager();这个属性,否则数据是无法显示的,应用不会报错,可以运行但就是不显示数据,曾经找了三个多小时才找到这个问题。源码中有一句A LayoutManager must be provided for RecyclerView to function,可以看出setLayoutManager()必须设置的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android RecyclerView Item点击事件 的相关文章

  • Android 7.0 Launcher3 去掉应用抽屉

    年初做过一个项目 xff0c 有一个需求就是需要将桌面变为单层不需要二级菜单 最近几次有小伙伴有这个问我这个解决办法 现在我将分享给大家 先上效果图 xff1a 功能分解 去除Allapp键 xff0c 调整HotSeat布局将所有应用摆在
  • Android 8.0 Settings流程分析与变动

    开 xff01 场 白 xff01 好 xff01 难 xff01 写 xff01 一 xff0c 相比Android Settings 7 0 如下图 xff0c 在7 0的基础上 xff0c 去掉了7 0新加的侧滑菜单 xff08 可能
  • Altium Designer PCB设置电源线粗细宽度+绘制时改变粗细

    一般电源线要给多个设备供电 xff0c 所以比信号线要粗一些 新建布线 Routing 的宽度规则 xff1a 然后如下图所示 xff0c 把这条规则重命名为width 5v 命名随意 并设置这条规则的作用对象为 xff1a 名字为 34
  • AndroidStudio安装BindView注解插件

    新版本androidStudio添加BindVIew插件可以直接在Build gradle Module app 里面的dependencies下添加 compile 39 com jakewharton butterknife 8 8 1
  • 漫话程序员们的家庭装修——书房篇

    身为一名程序员 xff0c 辛辛苦苦码代码N年 xff0c 终于攒下钱买了自己的小窝 xff0c 不好好犒劳一下自己都对不起自己的近视眼和鼠标手 这就来分享一下我装修的心得 xff0c 从书房开始 xff01 书房作为程序员在公司战斗一天回
  • 首次安装Android Studio 新建项目构建失败解决

    首次安装AS xff0c 新建项目需要下载构建所需jar包 xff0c 如果没有翻墙 xff0c 就很可能会导致下载失败 解决方案 xff1a 1 打开项目根目录下的build gradle文件 xff0c 把goole 和jcenter
  • Arch Linux安装中文输入法

    1 安装fcitx span class token function sudo span pacman S fcitx im 2 配置 如果以startx方式进入gnome 在 xinitrc xff0c exec之前中加入 xff1a
  • Activity和fragment的简单切换效果

    Activity有默认的切换效果 xff0c 但是这个效果我们也可以自定义 xff0c 主要用到overridePendingTransition int enterAnim int exitAnim 这个方法 xff0c 这个方法必须在s
  • java maven 连接mysql 8.0数据库

    JAVA maven项目 连接数据库 mysql8 0 查询 xff0c 插入 xff0c 删除 xff0c 更新 1 在pom xml加入mysql connector java依赖包 xff0c version要跟你的mysql版本对应
  • Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装GPT磁盘。

    报错 xff1a Windows无法安装到这个磁盘 xff0c 选中的磁盘具有MBR分区表 在EFI系统上 xff0c Windows只能安装GPT磁盘 操作 xff1a 1 Windows安装程序界面如下 xff0c 使用快捷键shift
  • 华为Taishan服务器安装UOS操作系统

    今天2020 12 18 折腾了一遍华为Taishan服务器重装UOS20操作系统 xff0c 没经验 xff0c 一堆问题 xff0c 逐个排查解决的 做个记录 xff0c 以免下次再坑 1 光驱引导 最开始 xff0c 选择光驱引导安装
  • SLF4J用户手册(谷歌翻译版)

    本文翻译自slf4j官方用户手册 xff0c 地址 SLF4J Manual Java 的简单日志门面 SLF4J 用作各种日志框架的简单门面或抽象 xff0c 例如 java util logging logback 和 reload4j
  • 读java编程思想的一点感触

    学习一些java基础语法后 xff0c 能应付简单的日常工作 但是觉得还是得系统学习一下这门语言 xff0c 就选择了java编程思想 原书第4版 xff0c 机械工业出版社 xff0c 陈昊鹏译的这本 看懂的不是很多 xff0c 还是学到
  • Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: No outputs for

    错误 xff1a Unable to determine application id com android tools idea run ApkProvisionException No outputs for the main art
  • 完善二叉树的右指针

    对于一个二叉树 xff0c 每个结点有三个指针 xff0c 除了左右子节点指针外还有一个指向右边的结点的指针 现在给定一个二叉树 xff0c 每个结点的右指针为空 xff0c 让你把每一层的结点都连起来 xff08 默认是完全二叉树 xff
  • 什么是AOSP?

    AOSP全名为Android Open Source Project xff0c 中文为安卓开源项目 xff0c 开源即开放源代码 Android是一个基于Linux xff0c 由Google主导的开源系统 严格意义上来说 xff0c A
  • 什么是APT攻击

    什么是APT攻击 APT攻击即高级可持续威胁攻击 也称为定向威胁攻击 xff0c 指某组织对特定对象展开的持续有效的攻击活动 APT是黑客以窃取核心资料为目的 xff0c 针对客户所发动的网络攻击和侵袭行为 xff0c 是一种蓄谋已久的 恶
  • CEO、COO、CFO、CTO、CMO是什么意思

    一 什么是CEO COO CFO CTO xff1f CEO总裁 CFO财务总监 CTO技术总监 COO运营总监 CEO Chief Executive officer 首席执行官 可以理解为是企业领导人和职业经理人两种身份的合一 xff0
  • POC测试是什么

    POC测试 xff0c 即Proof of Concept 可以理解为 xff1a 根据客户需求进行测试 是业界流行的针对客户具体应用的验证性测试 xff0c 根据用户对采用系统提出的性能要求和扩展需求的指标 xff0c 在选用服务器上进行
  • 开发环境、测试环境、生产环境

    生产环境 是可以对外开放 xff0c 已通过测试验证 xff0c 对外提供服务的环境 开发环境 程序员做开发的环境 xff0c 该环境已经部署好需要的开发工具和服务 测试环境 一般是从生产环境复制过来的环境 xff0c 用于要发布的服务 业

随机推荐