自定义高效支持点击监听的RecyclerView
自定义高效支持点击监听的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相关推荐
- 自定义DrawableTextView——实现TextView左上右下的点击监听
在Android开发中我们经常遇到TextView左上右下有图片的UI布局情形,并且各个图片点击后都要做相应的逻辑操作,这种情况下我们首先想到的是利用线性布局或相对布局去排版,然后给每个图片设置id, ...
- 使用swipecard实现卡片视图左右滑动监听以及点击监听
使用swipecard实现卡片视图左右滑动监听以及点击监听 前言: 大家好,今天给大家介绍安卓一种特别实用有很酷炫的组件swipecard,当然这并不是安卓爸爸创造的,这是国内的一个我认为是大牛的一 ...
- [2] 日历任务插件(jquery版)新增日历任务和点击监听
还是先放上图和源代码 jquery版 : https://gitee.com/under_the_sky/dateTask/tree/master/jquery%E7%89%88 本次为日历任务组件新 ...
- RecyclerView控件实现横向滚动和瀑布流布局,以及RecyclerView的点击监听(项目已上传GitHub)
先附上我的GitHub项目地址: https://github.com/Skymqq/RecyclerViewTest.git 我们已经知道,ListView的拓展性不好,它只能实现纵向的滚动的效果, ...
- jQuery-给ul添加了li之后,添加的li并没有绑定点击监听怎么办?
我们看一个简单的例子 效果图如下 这里面有一个ul里面套着4个li,还有一个独立的li 代码实例: 需求 1.点击li,背景就会变成红色 2.点击btn,就会添加一个li <html>&l ...
- 鸿蒙harmonyOS使用eTS UI时的点击监听问题
鸿蒙harmonyOS使用eTS UI时的点击监听问题 文章目录 鸿蒙harmonyOS使用eTS UI时的点击监听问题 前言 一.onClick 二.使用步骤 1.直接调用onClick 2.可以省 ...
- RecyclerView跳转到指定位置,RecyclerView上下滑动监听,RecyclerView滑动速度
1.RecyclerView跳转到指定位置 只需调用recycleview的置顶方法: recyclerView.scrollToPosition(15); 如果你需要让第15item在屏幕居中,只需 ...
- JavaScript实现鼠标点击监听---弹出社会主义核心价值观(面向对象小练习)
效果如下 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8& ...
- HQChart使用教程67 - 鼠标点击K线柱子监听事件
HQChart使用教程67 - 鼠标点击K线柱子监听事件 点击K线事件 步骤 1. 注册监听事件 事件回调函数说明 参数说明: K线数据说明 交流QQ群: 950092318 HQChart代码地址 ...
最新文章
- 一个apk多个ICON执行入口
- 动态获取UILabel的bounds
- 两边双虚线是什么意思_单黄线和双黄线有什么不同?很多人都记不对,被扣分都不知道...
- no such file or directory AndroidManifest.xml
- 前端学习(2441):删除处理完成
- eclipse3的jsp支持简单配置
- [swift 进阶]读书笔记-第一章:介绍、第二章(C2P2):第二章:内建集合类型
- 大班科学电子计算机,计算器教案
- 微型计算机结构五大,微型计算机的体系结构
- vue解决mintui中使用MessageBox弹窗拦截,移动端多次点击手机的物理返回键,选择确定后页面返回不正确问题
- 前度字符串转数组_leetcode每日一题
- 关于使用QML的MediaPlayer实现视频和音频的播放时遇到的一些坑
- 简单几步,让Mac外接显示器更好用
- ffmpeg 常用命令行 (视频-转码)
- 保罗兰德作品赏析_每周一书:保罗·兰德《设计的意义:保罗·兰德谈设计、形式与混沌》...
- matlab上确界距离,习题课PPT课件.ppt
- 蚂蚁金服高级技术专家李福喜 :蚂蚁开放平台技术路线及行业实践
- 网络与信息安全产品(一)
- 【OpenCV入门学习--python】图像的矩Image Moments
- Lined List
热门文章
- 条码的应用在管理上具有便捷的特点
- 戴森工程师揭秘Dyson 360 Eye吸尘机器人的故事:先要做到“智能”
- 图文:centos5.3下VMware虚拟机NAT上网实现
- 技术在大数据分析中的重要性
- 深圳联通与深圳中琛源科技正式达成了5Gn战略合作
- 通俗易懂的Monte Carlo的积分方法(三)
- 边信息(即对应的两个数组值)_Python 数据分析 NumPy 模块迭代数组nditer方法详解...
- 电脑脱机状态怎么解除_win7系统如何解除脱机工作 win7系统解除脱机工作步骤【介绍】...
- AcWing 5. 多重背包问题 II(二进制优化)
- AcWing 892. 台阶-Nim游戏(nim博弈变种)