Android防止过快点击造成多次事件
问题
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防止过快点击造成多次事件相关推荐
- Android模拟屏幕点击,滑动等事件
模拟事件全部是通过input命令来实现的,首先看一下input命令的使用: usage: input ... input text <string> input keyeve ...
- Android控件点击圆形阴影反馈解决方案
Android控件点击圆形阴影反馈解决方案 愿景 对于手机App而言,没有反馈效果的按钮使用体验是不舒服的.最近在深入学习Material Design,对其中的ripple效果比较感兴趣.我想着尝试 ...
- android特效按钮点击效果
2019独角兽企业重金招聘Python工程师标准>>> android特效按钮点击效果,动画从里到外渐变放大散花效果,本例子适合做一些特效的app使用, 使用很简单,直接可以把里面代 ...
- android ViewPager 实现点击小圆点切换页面 案例
android ViewPager 实现点击小圆点切换页面 说明:在viewpager中,通过左右滑动可以切换页面,同样可以通过点击所指示的小圆点来滑动到某个页面页面. 具体实现方法如下: 主要ac ...
- android点击隐藏控件,Android编程实现点击EditText之外的控件隐藏软键盘功能
本文实例讲述了Android编程实现点击EditText之外的控件隐藏软键盘功能.分享给大家供大家参考,具体如下: 工具类 ... public static void hideKeyboard(Co ...
- android listview item 展开动画,android的ListView点击item使item展开的做法的实现代码
本文介绍了android的ListView点击item使item展开的做法的实现代码,分享给大家,具体如下: 效果图: 原理是点击item的时候,重新measure list的各个item的高度 li ...
- android优美列表页面,android listview 列表 点击列表进入详细页面
[实例简介] android listview 列表 点击列表进入详细页面 [实例截图] [核心代码] ListviewSingleChoice └── ListviewSingleChoice ├─ ...
- 3种方法实现Android按钮的点击事件,建议收藏!
Button是程序用于和用户进行交互的一个重要控件,相信大家对这个控件已经非常熟悉了,我们平时用的最多的控件之一.既然有Button,那肯定有onClick方法,下面就教大家三种实现点击事件的方法,大 ...
- Android之按钮点击事件——显示图片隐藏图片
哈喽!时隔两个月,我又和大家见面啦! 今天,我要分享的内容一如既往的很基础,即关于Android的按钮点击事件--显示图片&&隐藏图片,它的执行过程比较简单,所以这里我就不放什么图片或 ...
最新文章
- 基础篇9-python基本数据结构-列表
- 基于haproxy+keepalive+varnish实现lnmp企业级架构
- Linux Capabilities 入门教程--概念篇
- 使用Xtend构建Vaadin UI
- 透明大页相关内核参数_透明大内存页Hugepage支持
- 将您的SQL Server工作负载迁移到PostgreSQL –第1部分
- 【转载】关闭ftp中mput的上传确认提示:prompt
- springboot集成rocketmq
- 某烟草局绩效考核系统分析设计清单
- python爬虫:爬取携程航班数据
- LIS O(n*lgn)
- 计算机怎么设置默认桌面,盒子如何将沙发桌面设置成默认桌面?
- SpringCloud核心教程 | 第四篇:服务注册与发现 Consul篇
- Function的含义
- 【SQL自学打卡|DAY17】——多表查询
- 加密IC卡保险柜控制器的设计
- 如何用一张影像动图来对比成都市2019年和2020年油菜花分布状态?
- MySQL报错no connection established
- 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)
- 1.10 环的同态和理想
热门文章
- CredSSP加密Oracle修正 解决方法
- 辽师04级计算机学院微信群,开学第一课 | 辽师附中两位名师微信群指导高三规划数学高分策略...
- excel@表格斜线和内容填充@单元格大小调整
- 使用SourceInsight时输入字符会把后面的字符覆盖
- Flutter中管理路由栈的方法和应用
- java版坦克大战加入背景音乐及背景图片
- 什么无线耳机性价比高,这五款可供大家选购
- **kwargs python_python中**kwargs怎么用?
- 架构-稳定性建设逻辑问题实战总结
- 基于Transformer的YOLOv5小目标检测器 | 四头加注意力