自定义高效支持点击监听的RecyclerView

效果图

Demo

地址:GitHub

传统做法

在Adapter内部直接对View添加点击事件

因为这种方式虽然也可以解决点击监听问题,但是效率不高,所以我就截了一张图,大家也就不要想着复制了,

话说我原来也是一直用这种方式,直到看到一篇文章:RecyclerView无法添加onItemClickListener最佳的高效解决方案

性能上肯定是有一定提升,下面我对此进行了一下封装

封装

package kong.qingwei.recyclerviewitemclickdemo;import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;/*** Created by kqw on 2016/5/18.* KqwRecyclerView* 支持点击监听的RecyclerView*/
public class KqwRecyclerView extends RecyclerView implements RecyclerView.OnItemTouchListener {private GestureDetectorCompat mGestureDetector;private OnItemClickListener mOnItemClickListener;private OnItemLongClickListener mOnItemLongClickListener;public KqwRecyclerView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);initRecyclerView();}private void initRecyclerView(){mGestureDetector = new GestureDetectorCompat(getContext(), new ItemTouchHelperGestureListener());addOnItemTouchListener(this);}@Overridepublic boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {mGestureDetector.onTouchEvent(e);return false;}@Overridepublic void onTouchEvent(RecyclerView rv, MotionEvent e) {mGestureDetector.onTouchEvent(e);}@Overridepublic void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}private class ItemTouchHelperGestureListener extends GestureDetector.SimpleOnGestureListener {@Overridepublic boolean onSingleTapUp(MotionEvent e) {View child = findChildViewUnder(e.getX(), e.getY());if (child != null) {RecyclerView.ViewHolder vh = getChildViewHolder(child);// 回调if (mOnItemClickListener != null) {mOnItemClickListener.onItemClick(vh);}}return true;}@Overridepublic void onLongPress(MotionEvent e) {View child = findChildViewUnder(e.getX(), e.getY());if (child!=null) {RecyclerView.ViewHolder vh = getChildViewHolder(child);// 回调if (mOnItemLongClickListener != null) {mOnItemLongClickListener.onItemLongClick(vh);}}}}public interface OnItemClickListener {void onItemClick(ViewHolder v);}public interface OnItemLongClickListener {boolean onItemLongClick(ViewHolder v);}public void setOnItemClickListener(@Nullable OnItemClickListener listener) {mOnItemClickListener = listener;}public void setOnItemLongClickListener(OnItemLongClickListener listener) {if (!isLongClickable()) {setLongClickable(true);}mOnItemLongClickListener = listener;}
}

使用

使用和ListView一样

KqwRecyclerView recyclerView = (KqwRecyclerView) findViewById(R.id.recyclerView);
……
recyclerView.setOnItemClickListener(new KqwRecyclerView.OnItemClickListener() {@Overridepublic void onItemClick(RecyclerView.ViewHolder v) {Toast.makeText(getApplicationContext(), "onItemClick\n" + v.toString(), Toast.LENGTH_SHORT).show();}
});
recyclerView.setOnItemLongClickListener(new KqwRecyclerView.OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(RecyclerView.ViewHolder v) {Toast.makeText(getApplicationContext(), "onItemLongClick\n" + v.toString(), Toast.LENGTH_SHORT).show();return false;}
});

自定义高效支持点击监听的RecyclerView相关推荐

  1. 自定义DrawableTextView——实现TextView左上右下的点击监听

    在Android开发中我们经常遇到TextView左上右下有图片的UI布局情形,并且各个图片点击后都要做相应的逻辑操作,这种情况下我们首先想到的是利用线性布局或相对布局去排版,然后给每个图片设置id, ...

  2. 使用swipecard实现卡片视图左右滑动监听以及点击监听

    使用swipecard实现卡片视图左右滑动监听以及点击监听  前言: 大家好,今天给大家介绍安卓一种特别实用有很酷炫的组件swipecard,当然这并不是安卓爸爸创造的,这是国内的一个我认为是大牛的一 ...

  3. [2] 日历任务插件(jquery版)新增日历任务和点击监听

    还是先放上图和源代码 jquery版 : https://gitee.com/under_the_sky/dateTask/tree/master/jquery%E7%89%88 本次为日历任务组件新 ...

  4. RecyclerView控件实现横向滚动和瀑布流布局,以及RecyclerView的点击监听(项目已上传GitHub)

    先附上我的GitHub项目地址: https://github.com/Skymqq/RecyclerViewTest.git 我们已经知道,ListView的拓展性不好,它只能实现纵向的滚动的效果, ...

  5. jQuery-给ul添加了li之后,添加的li并没有绑定点击监听怎么办?

    我们看一个简单的例子 效果图如下 这里面有一个ul里面套着4个li,还有一个独立的li 代码实例: 需求 1.点击li,背景就会变成红色 2.点击btn,就会添加一个li <html>&l ...

  6. 鸿蒙harmonyOS使用eTS UI时的点击监听问题

    鸿蒙harmonyOS使用eTS UI时的点击监听问题 文章目录 鸿蒙harmonyOS使用eTS UI时的点击监听问题 前言 一.onClick 二.使用步骤 1.直接调用onClick 2.可以省 ...

  7. RecyclerView跳转到指定位置,RecyclerView上下滑动监听,RecyclerView滑动速度

    1.RecyclerView跳转到指定位置 只需调用recycleview的置顶方法: recyclerView.scrollToPosition(15); 如果你需要让第15item在屏幕居中,只需 ...

  8. JavaScript实现鼠标点击监听---弹出社会主义核心价值观(面向对象小练习)

    效果如下 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8& ...

  9. HQChart使用教程67 - 鼠标点击K线柱子监听事件

    HQChart使用教程67 - 鼠标点击K线柱子监听事件 点击K线事件 步骤 1. 注册监听事件 事件回调函数说明 参数说明: K线数据说明 交流QQ群: 950092318 HQChart代码地址 ...

最新文章

  1. 一个apk多个ICON执行入口
  2. 动态获取UILabel的bounds
  3. 两边双虚线是什么意思_单黄线和双黄线有什么不同?很多人都记不对,被扣分都不知道...
  4. no such file or directory AndroidManifest.xml
  5. 前端学习(2441):删除处理完成
  6. eclipse3的jsp支持简单配置
  7. [swift 进阶]读书笔记-第一章:介绍、第二章(C2P2):第二章:内建集合类型
  8. 大班科学电子计算机,计算器教案
  9. 微型计算机结构五大,微型计算机的体系结构
  10. vue解决mintui中使用MessageBox弹窗拦截,移动端多次点击手机的物理返回键,选择确定后页面返回不正确问题
  11. 前度字符串转数组_leetcode每日一题
  12. 关于使用QML的MediaPlayer实现视频和音频的播放时遇到的一些坑
  13. 简单几步,让Mac外接显示器更好用
  14. ffmpeg 常用命令行 (视频-转码)
  15. 保罗兰德作品赏析_每周一书:保罗·兰德《设计的意义:保罗·兰德谈设计、形式与混沌》...
  16. matlab上确界距离,习题课PPT课件.ppt
  17. 蚂蚁金服高级技术专家李福喜 :蚂蚁开放平台技术路线及行业实践
  18. 网络与信息安全产品(一)
  19. 【OpenCV入门学习--python】图像的矩Image Moments
  20. Lined List

热门文章

  1. 条码的应用在管理上具有便捷的特点
  2. 戴森工程师揭秘Dyson 360 Eye吸尘机器人的故事:先要做到“智能”
  3. 图文:centos5.3下VMware虚拟机NAT上网实现
  4. 技术在大数据分析中的重要性
  5. 深圳联通与深圳中琛源科技正式达成了5Gn战略合作
  6. 通俗易懂的Monte Carlo的积分方法(三)
  7. 边信息(即对应的两个数组值)_Python 数据分析 NumPy 模块迭代数组nditer方法详解...
  8. 电脑脱机状态怎么解除_win7系统如何解除脱机工作 win7系统解除脱机工作步骤【介绍】...
  9. AcWing 5. 多重背包问题 II(二进制优化)
  10. AcWing 892. 台阶-Nim游戏(nim博弈变种)