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标准实现(二),封装抽取成通用工具类的更多相关文章

  1. Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector

     Android RecyclerView单击.长按事件:基于OnItemTouchListener + GestureDetector标准实现 Android RecyclerView虽然拥有L ...

  2. Android学习笔记长按事件的处理

    常见的长按事件 代码示例: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns ...

  3. android的单击监听事件

    Button button = (Button) findViewById(R.id.button1); //1.直接new出来 button.setOnClickListener(new View. ...

  4. RecyclerView的单击和长按事件(转)

    转自:http://www.jianshu.com/p/f2e0463e5aef 前言 上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了Recy ...

  5. Android系统中自定义按键的短按、双击、长按事件

    在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1.单击 ...

  6. android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理

    本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作点击事 ...

  7. Android 自定义View实现单击和双击事件

    自定义View, 1. 自定义一个Runnable线程TouchEventCountThread ,  用来统计500ms内的点击次数 2. 在MyView中的 onTouchEvent 中调用 上面 ...

  8. android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理

    本演示样例说明: 1.自己定义listview条目样式,自己定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,而且操作后listview自己主动刷新. 3.响应用 ...

  9. Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮

    效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...

随机推荐

  1. laravel框架总结(五) -- 服务提供者(提及契约Contracts)

    首先理解两个概念 1.契约:一组定义了框架核心服务的接口 2.服务提供者:所有 Laravel 应用程序启动的中心所在. 包括你自己的应用程序,以及所有的 Laravel 核心服务,都是通过服务提供者 ...

  2. Displaying Window In Center In Oracle Forms 6i

    Center window automatically  in Oracle Forms 6i, use the following procedure by passing window name ...

  3. hihoCoder太阁最新面经算法竞赛18

    比赛链接:http://hihocoder.com/contest/hihointerview27/problems A.Big Plus 模拟水 #include <bits/stdc++.h ...

  4. 下载SRA文件

    sratoolkit.2.6.2-centos_linux64/bin/prefetch  下载SRA文件 fastq-dump    --split-3    SRR2923014.sra    转 ...

  5. Cron表达式简单学习

    CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTrigger,你可以指定触 ...

  6. ExceptionExtensions

    public static class ExceptionExtensions { public static IEnumerable<Exception> GetAllException ...

  7. Shiro Security

    手动创建shiro Filter的java代码 // Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecu ...

  8. jquery mobile的事件

    有个问题困扰了我两天,知道今天才解决. 那就是page的pagecreate事件,只调用一次 如果想随时更新,就要调用pageshow事件,每次都会调用, 这个事情再次告诉我,基础要扎实啊,不然会浪费 ...

  9. Android Studio中的六种依赖

    在Android Studio中有六种依赖 Compile,Provided,APK,Test compile,Debug compile,Release compile Compile compil ...

  10. 你真的会写单例模式吗-------Java实现

    转载: 你真的会写单例模式吗--Java实现 单例模式可能是代码最少的模式了,但是少不一定意味着简单,想要用好.用对单例模式,还真得费一番脑筋.本文对Java中常见的单例模式写法做了一个总结,如有错漏 ...