Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
我写的附录文章2,介绍了Android如何基于OnItemTouchListener +GestureDetector实现单击、长按事件的监听,由于如今RecyclerView在Android开发是如此的普遍,以及RecyclerView的单击事件是如此的常用,如果像附录文章2那样把一堆事件监听写到业务逻辑代码里面,那得写多少遍重复代码!所以我把给RecyclerView添加点击事件的Listener抽取、封装成一个常用的工具栏类RecyclerViewUtil。
在给一个RecyclerView添加单击事件时候,跟ListView的监听事件一样,只需要简单的写如下代码即可完成:
//第一步,先初始化RecyclerViewUtil,传入当前的RecyclerView对象和上下文指针this:Context
RecyclerViewUtil util=new RecyclerViewUtil(this,mRecyclerView); //第二步,直接set
util.setOnItemClickListener(new RecyclerViewUtil.OnItemClickListener() {
@Override
public void onItemClick(int position, View view) {
//Toast.makeText(getApplicationContext(),position+" 单击",Toast.LENGTH_SHORT).show();
}
});
长按事件也类似:
//先初始化RecyclerViewUtil,传入当前的RecyclerView对象和上下文指针this:Context
RecyclerViewUtil util=new RecyclerViewUtil(this,mRecyclerView); util.setOnItemLongClickListener(new RecyclerViewUtil.OnItemLongClickListener() {
@Override
public void onItemLongClick(int position, View view) {
//Toast.makeText(getApplicationContext(),position+" 长按",Toast.LENGTH_SHORT).show();
}
});
封装、抽取好的通用RecyclerViewUtil.java全部代码:
package zhangphil.app; import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View; /**
* Created by Phil on 2016/11/19.
*/ public class RecyclerViewUtil {
private RecyclerView mRecyclerView = null;
private GestureDetector mGestureDetector = null;
private RecyclerView.SimpleOnItemTouchListener mSimpleOnItemTouchListener;
private OnItemClickListener mOnItemClickListener = null;
private OnItemLongClickListener mOnItemLongClickListener = null;
private Context context; public RecyclerViewUtil(Context context, RecyclerView recyclerView) {
this.context = context;
this.mRecyclerView = recyclerView; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
//长按事件
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
if (mOnItemLongClickListener != null) {
View childView = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null) {
int position = mRecyclerView.getChildLayoutPosition(childView);
mOnItemLongClickListener.onItemLongClick(position, childView);
}
}
} //单击事件
@Override
public boolean onSingleTapUp(MotionEvent e) {
if (mOnItemClickListener != null) {
View childView = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
if (childView != null) {
int position = mRecyclerView.getChildLayoutPosition(childView);
mOnItemClickListener.onItemClick(position, childView);
return true;
}
} return super.onSingleTapUp(e);
}
}); mSimpleOnItemTouchListener = new RecyclerView.SimpleOnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
if (mGestureDetector.onTouchEvent(e)) {
return true;
}
return false;
}
}; mRecyclerView.addOnItemTouchListener(mSimpleOnItemTouchListener);
} public void setOnItemClickListener(OnItemClickListener l) {
mOnItemClickListener = l;
} public void setOnItemLongClickListener(OnItemLongClickListener l) {
mOnItemLongClickListener = l;
} //长按事件接口
public interface OnItemLongClickListener {
public void onItemLongClick(int position, View view);
} //单击事件接口
public interface OnItemClickListener {
public void onItemClick(int position, View view);
}
}
使用时候直接把RecyclerViewUtil.java复制到自己的项目代码工程中即可。
附录:
1,《RecyclerView点击事件》链接:http://blog.csdn.net/zhangphil/article/details/46771865
2,《Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector》:http://blog.csdn.net/zhangphil/article/details/53230157
Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类的更多相关文章
- Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector
Android RecyclerView单击.长按事件:基于OnItemTouchListener + GestureDetector标准实现 Android RecyclerView虽然拥有L ...
- Android学习笔记长按事件的处理
常见的长按事件 代码示例: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns ...
- android的单击监听事件
Button button = (Button) findViewById(R.id.button1); //1.直接new出来 button.setOnClickListener(new View. ...
- RecyclerView的单击和长按事件(转)
转自:http://www.jianshu.com/p/f2e0463e5aef 前言 上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了Recy ...
- Android系统中自定义按键的短按、双击、长按事件
在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1.单击 ...
- android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理
本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作点击事 ...
- Android 自定义View实现单击和双击事件
自定义View, 1. 自定义一个Runnable线程TouchEventCountThread , 用来统计500ms内的点击次数 2. 在MyView中的 onTouchEvent 中调用 上面 ...
- android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理
本演示样例说明: 1.自己定义listview条目样式,自己定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,而且操作后listview自己主动刷新. 3.响应用 ...
- Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮
效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...
随机推荐
- php数组插入数据库这个功能该怎么实现
原文网址:https://segmentfault.com/q/1010000004048449 比如一个数组$a=array("a"=>"1",&quo ...
- iOS 键盘类型定制归纳
一.键盘风格 支持8种风格键盘. typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboardTypeASCIICapable, // ...
- PHP匿名函数的使用
$dealer = array(); array_walk($dealer_id_arr,function($value) use(&$dealer) { $dealer[] = get_co ...
- DSO、CUBE区别(覆盖、合计)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- PDO数据库抽象层
PDO的优势在于兼容性,但速度不如mysql和mysqli new PDO($dsn,$username,$passwd[,$options]) $options可以设置数据库连接属性,如: $opt ...
- linux&win7双系统安装
linux&win7双系统安装 硬盘大小分配方案 按照顺序来建立分区 /swap 4G ==即交换分区,也是一种文件系统,它的作用是作为Linux的虚拟内存.在Windows下, ...
- python 中date datetime time 与str的互转
以下全部引入 form datetime import datetime, timedelta import time 一.time 转str 二.datetime 转 str str_date = ...
- Deep Learning 10_深度学习UFLDL教程:Convolution and Pooling_exercise(斯坦福大学深度学习教程)
前言 理论知识:UFLDL教程和http://www.cnblogs.com/tornadomeet/archive/2013/04/09/3009830.html 实验环境:win7, matlab ...
- CSS cursor属性
介绍: 该属性规定要显示的光标的类型,该属性定义了鼠标指针放在一个元素边界范围之内的时候所用的光标的形状. 常用的属性值: default:默认光标 auto:浏览器默认的光标 pointer:光标呈 ...
- Android之hint提示字体大小修改,显示完全
Android之hint提示字体大小修改,显示完全 1.工作中遇到一个问题,就是自定义EditText的hint提示在超大字体下会显示不全, 2.然后在网上搜索了一下,在这里记录一下,分享给大家,在此 ...