问题

onClick事件是Android开发中最常见的事件。比如,一个submitButton,功能是点击之后会提交一个订单,
则一般代码如下,其中submitOrder()函数会跳转到下一页进行处理 :

    //代码0submitButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {submitOrder();}}); 

正常情况下这段代码是没什么问题的,但是Android设备的机型性能等千差万别,如果碰到比较卡的手机,则有可能出现submitOrder()函数跳转页面出现延迟的现象。碰到这种现象,则用户就很有可能再次点击一次,从而造成函数被调用两次,出现重复订单的BUG。
一般地,碰到这现象,首先就会想到的就是在点击之后把submitButton设置为不可点击:

     //代码1submitButton.setClickable(false);//或者   submitButton.setEnabled(false); </code>

此方法也确实有效,不过如果submitOrder()方法没有成功,需要再次提交订单时又需要再重复把submitButton设置为可点击状态。如果类似的button比较多时,就显得比较麻烦、混乱。

方案

自定义一个NoDoubleClickListener,继承自OnClickListener
    //代码2public abstract class NoDoubleClickListener implements OnClickListener {public static final int MIN_CLICK_DELAY_TIME = 1000;private long lastClickTime = 0;@Overridepublic void onClick(View v) {long currentTime = Calendar.getInstance().getTimeInMillis();if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {lastClickTime = currentTime;onNoDoubleClick(v);} }   }

使用方法—— 给submitButton设置点击事件时用NoDoubleClickListener代替OnClickListener,并且实现方法onNoDoubleClick代替onClick即可,像这样:

<span style="font-size:14px;">      //代码3submitButton.setOnClickListener(new NoDoubleClickListener() {@Overridepublic void onNoDoubleClick(View v) {submitOrder();}}); </span>

原理

很简单,见代码……
就是用onNoDoubleClick代替onClick处理具体的操作,在onClick方法中加一个判断:在接收到点击事件之后,先判断一下时间,如果距离上次处理操作不足MIN_CLICK_DELAY_TIME,就忽视——即能防止误操作的连续点击导致重复事件。

MIN_CLICK_DELAY_TIME可调。

优势

好处是不用改变原有代码的逻辑,就只需要两个替换:NoDoubleClickListener代替OnClickListener,onNoDoubleClick代替onClick。 代码的结构等都不需要做改变(**对比上面的代码0跟代码**3),不需要关心处理更改button的状态这些额外判断逻辑,只需要关注业务逻辑即可,简洁优雅~

Android防止过快点击造成多次事件相关推荐

  1. Android模拟屏幕点击,滑动等事件

    模拟事件全部是通过input命令来实现的,首先看一下input命令的使用: usage: input ... input text <string>        input keyeve ...

  2. Android控件点击圆形阴影反馈解决方案

    Android控件点击圆形阴影反馈解决方案 愿景 对于手机App而言,没有反馈效果的按钮使用体验是不舒服的.最近在深入学习Material Design,对其中的ripple效果比较感兴趣.我想着尝试 ...

  3. android特效按钮点击效果

    2019独角兽企业重金招聘Python工程师标准>>> android特效按钮点击效果,动画从里到外渐变放大散花效果,本例子适合做一些特效的app使用, 使用很简单,直接可以把里面代 ...

  4. android ViewPager 实现点击小圆点切换页面 案例

    android ViewPager  实现点击小圆点切换页面 说明:在viewpager中,通过左右滑动可以切换页面,同样可以通过点击所指示的小圆点来滑动到某个页面页面. 具体实现方法如下: 主要ac ...

  5. android点击隐藏控件,Android编程实现点击EditText之外的控件隐藏软键盘功能

    本文实例讲述了Android编程实现点击EditText之外的控件隐藏软键盘功能.分享给大家供大家参考,具体如下: 工具类 ... public static void hideKeyboard(Co ...

  6. android listview item 展开动画,android的ListView点击item使item展开的做法的实现代码

    本文介绍了android的ListView点击item使item展开的做法的实现代码,分享给大家,具体如下: 效果图: 原理是点击item的时候,重新measure list的各个item的高度 li ...

  7. android优美列表页面,android listview 列表 点击列表进入详细页面

    [实例简介] android listview 列表 点击列表进入详细页面 [实例截图] [核心代码] ListviewSingleChoice └── ListviewSingleChoice ├─ ...

  8. 3种方法实现Android按钮的点击事件,建议收藏!

    Button是程序用于和用户进行交互的一个重要控件,相信大家对这个控件已经非常熟悉了,我们平时用的最多的控件之一.既然有Button,那肯定有onClick方法,下面就教大家三种实现点击事件的方法,大 ...

  9. Android之按钮点击事件——显示图片隐藏图片

    哈喽!时隔两个月,我又和大家见面啦! 今天,我要分享的内容一如既往的很基础,即关于Android的按钮点击事件--显示图片&&隐藏图片,它的执行过程比较简单,所以这里我就不放什么图片或 ...

最新文章

  1. 基础篇9-python基本数据结构-列表
  2. 基于haproxy+keepalive+varnish实现lnmp企业级架构
  3. Linux Capabilities 入门教程--概念篇
  4. 使用Xtend构建Vaadin UI
  5. 透明大页相关内核参数_透明大内存页Hugepage支持
  6. 将您的SQL Server工作负载迁移到PostgreSQL –第1部分
  7. 【转载】关闭ftp中mput的上传确认提示:prompt
  8. springboot集成rocketmq
  9. 某烟草局绩效考核系统分析设计清单
  10. python爬虫:爬取携程航班数据
  11. LIS O(n*lgn)
  12. 计算机怎么设置默认桌面,盒子如何将沙发桌面设置成默认桌面?
  13. SpringCloud核心教程 | 第四篇:服务注册与发现 Consul篇
  14. Function的含义
  15. 【SQL自学打卡|DAY17】——多表查询
  16. 加密IC卡保险柜控制器的设计
  17. 如何用一张影像动图来对比成都市2019年和2020年油菜花分布状态?
  18. MySQL报错no connection established
  19. 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)
  20. 1.10 环的同态和理想

热门文章

  1. CredSSP加密Oracle修正 解决方法
  2. 辽师04级计算机学院微信群,开学第一课 | 辽师附中两位名师微信群指导高三规划数学高分策略...
  3. excel@表格斜线和内容填充@单元格大小调整
  4. 使用SourceInsight时输入字符会把后面的字符覆盖
  5. Flutter中管理路由栈的方法和应用
  6. java版坦克大战加入背景音乐及背景图片
  7. 什么无线耳机性价比高,这五款可供大家选购
  8. **kwargs python_python中**kwargs怎么用?
  9. 架构-稳定性建设逻辑问题实战总结
  10. 基于Transformer的YOLOv5小目标检测器 | 四头加注意力