• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android防止过快点击造成多次事件

Android防止过快点击造成多次事件

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android事件分发机制,android 事件分发,android 点击事件,android 按钮点击事件,android onclick事件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android防止过快点击造成多次事件


问题

onClick事件是Android开发中最常见的事件。比如,一个submitButton,功能是点击之后会提交一个订单,
则一般代码如下,其中submitOrder()函数会跳转到下一页进行处理 :
    //代码0
        submitButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                submitOrder();
            }
        }); 

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

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

方案

:</div>
    //代码2
        public abstract class NoDoubleClickListener implements OnClickListener {
 
            public static final int MIN_CLICK_DELAY_TIME = 1000;
            private long lastClickTime = 0;
 
            @Override
            public 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即可,像这样:</div>  </div>
      //代码3
        submitButton.setOnClickListener(new NoDoubleClickListener() {
            @Override
            public void onNoDoubleClick(View v) {
                submitOrder();
            }
        }); 


原理

</div>

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

MIN_CLICK_DELAY_TIME可调。

优势

</div>

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

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android事件分发机制浅谈(一),android浅谈
  • Android开发2:事件处理及实现简单的对话框,android开发
  • Android面试题--事件处理,android试题--事件
  • Android中事件的分发机制
  • Android防止过快点击造成多次事件
  • Android事件分发
  • android的消息机制
  • Android_事件纷发
  • Android事件分发机制总结
  • Android基于监听的事件处理机制

相关文章

  • 2017-05-26ListView和Adapter的配合使用以及Adapter的重写,listviewadapter
  • 2017-05-26硅谷新闻4--解决页签手指按下从左到右滑动的bug,硅谷4--
  • 2017-05-26NDK-JNI实战教程(二) JNI官方中文资料,ndk-jnijni
  • 2017-05-26阿里巴巴开源Weex 开发教程,开源weex
  • 2017-05-26android的color整理(一),androidcolor整理
  • 2017-05-226.3.1 数据存储与访问之——初见SQLite数据库
  • 2017-05-26Android之SQLite数据存储,androidsqlite
  • 2017-05-26Android中的Menu,AndroidMenu
  • 2017-05-26Android--BroadcastReceiver应用详解
  • 2017-05-26Android学习笔记-ImageView(图像视图),android-imageview

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在Windows下快速搭建React Native Android开发环境
    • 在Mac系统中 下载、安装AndroidStudio
    • UI篇(初识君面),ui初识君面
    • Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ...,dalvikdex
    • Android开发学习之路--图表实现(achartengine/MPAndroidChart)之初体验
    • Android Call(打电话)的基本知识详解,androidcall
    • 编译器开发系列--Ocelot语言3.类型名称的消解,编译器--ocelot
    • Android sdk content loader 0%,androidsdk
    • Android 第一http请求访问慢,以后就快了的问题,android请求
    • android:SpannableString的应用,TextView中某些文字的点击事件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有