防止Button按钮重复点击

背景:在测试中,测试MM总喜欢连续重复点击Button,如果click事件的处理业务,稍微有些耗时,或者设备反应比较慢时,就会响应2遍处理,导致错误的现象出现。

前提:click事件的处理业务,是耗时操作(允许在主线程限制以内的耗时)

发生情景:UI中单个button & 多个button

解决方案有两种:1.setEnabled() 2.添加标志量mClicked 3.判断相邻两次点击的时间间隔

对于单个button处理较简单

方案1:onClick() { setEnabled(false); businessHandle(End: setEnabled(true);)} //不推荐,体验效果很不好

方案2:onClick() { if(mClicked) return; mClicked = true; businessHandle(End: mClicked = false;)}

方案3:onClick() { if(isFastClick()) return; mClickLastTime = System.currentTimeMillis(); businessHandle()}

private static final long MAX_FAST_CLICK_INTERVAL = 500;

private long mClickLastTime;

private boolean isFastClick() {
long clickTime = System.currentTimeMillis();
if (clickTime - mClickLastTime> 0
&& clickTime - mClickLastTime<= MAX_FAST_CLICK_INTERVAL) {
return true;
}
return false;
}

 

对于多个button需要增加handler特殊处理,防止button响应错乱

Handler mHandler = new Handler(){

handleMessage(msg) {

  if(msg.what == ClickWhat) {

    switch(msg.obj == vId) {setEnabled(false); HandleForvId(End: setEnabled(true))} //不推荐,体验效果很不好

    //switch(msg.obj == vId) {mClicked=true; HandleForvId(End: mClicked=false)}

    //switch(msg.obj == vId) {mClickLastTime = System.currentTimeMillis();HandleForvId();}

}

}

方案1:onClick() {mHandler.obtainMessage(what, v.getId())}

方案2:onClick(View v) {if(mClicked) return;mHandler.obtainMessage(what, v.getId())}

方案3:onClick(View v) {if(isFastClick()) return; mHandler.obtainMessage(what, v.getId())}

转载于:https://www.cnblogs.com/shen148134/p/4422935.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8086交换指令XCHG

XCHG OPRD1,OPRD2;实现OPRD1与OPRD2之间数据交换;OPRD1,OPRD2同时是字节或字操作数, MOV AX,1 MOV BX,2 XCHG AX,BX ;执行后AX2,BX1

[傅里叶变换及其应用学习笔记] 二十四. 级联,脉冲响应

我们上节课学习了 在离散有限维空间中&#xff0c;任何线性系统都是通过矩阵间的相乘得到的在连续无限维空间中&#xff0c;任何线性系统都是通过对核函数的积分得到的脉冲响应&#xff08;impulse response&#xff09; 级联线性系统&#xff08;Cascading linear system&…

WPF如何实现TreeView节点重命名

我们经常看到一些软件比如酷狗音乐&#xff0c;在对列表右键进行重命名的时候&#xff0c;当前列表会泛白并且进入可编辑状态&#xff0c;当我们更改完成后就会并进入非编辑状态&#xff0c;这些具体是怎么实现的呢&#xff1f;下面的方法也许会提供一些思路&#xff0c;下面的…

8086地址传送指令LEA

LEA REG,OPRD ;操作数OPRD必须是一个存储器操作数 LEA AX,IDATA ;把IDATA的偏移地址传送到AX寄存器中DATA SEGMENTIDATA DW 1,2,3,4 DATA ENDS CODE SEGEMNT BEG:MOV AX,OFFSET IDATA ;AXIDATA的偏移地址LEA AX,IDATA ;AXIDATA的偏移地址LEA AX,DS:[IDATA] ;把ds:[IDA…

Shell --- 批量修改文件后缀脚本

for f in *.$1; dofilenamebasename $fmv $f "${filename%.*}".$2; done; Usage:&#xff1a; rename suffix rename_suffix eg: rename dat txt > ls > a.dat > rename dat txt > ls > a.txt 转载于:https://www.cnblogs.com/RookieCoder/p/5140265.…

8086标志操作指令

标号传送指令LAHF 把FLAG低八位送入AH。不影响FLAG的任何位LAHF ;把CF,PF,AF,ZF,SF送入AH的相应位即0,2,4,6,7位SAHF 把AH送入FLAG低八位。根据AH中的内容FLAG的低八位受到影响,高位不受影响MOV AH,11111111B SAHF ;(执行后CF,PF,AF,ZF,SF等于1)PUSHF 把FLAG压入栈中。不影…

最大子序列和

一、遍历所有可能情况 (1234...N)所有可能子序列如下&#xff1a; 1&#xff1b;12&#xff1b;123...... 2&#xff1b;23&#xff1b;234...... ...... N 共N趟&#xff0c;没趟可能的情况由N&#xff0c;N-1...&#xff0c;1依次递减。 时间复杂度O(N3)的算法&#xff1a; i…

!--注释--和%--注释--%有什么区别

转载&#xff1a;版权所有&#xff1a;基础软件。作者邮箱&#xff1a;s.j.l.studiohotmail.com&#xff0c;sun.j.l.studiogmail.com。本文首发于 http://www.cnblogs.com/FoundationSoft。文章转载请保持此版权信息并注明出处。 使用ASP.NET编辑页面时&#xff0c;有两种注释…

团队开发——用户需求调研报告

用户需求调研报告 项目名称&#xff1a; 躲避小球 项目编号&#xff1a;001 调研主题&#xff1a; 用户需求 访谈时间&#xff1a;2015.4.10 调研地点&#xff1a; 石家庄铁道大学图书馆 访谈部门&#xff1a; 三个人行 参与人员&#xff1a; 林彦汝 1. 访谈目的 1、让用…

8086地址传送指令LDS,LES

LDS REG,OPRE;REG是一个16位寄存器,OPRD是一个存储器操作数,为双字项,高16位送入DS,低16位送入REG LDS BX,[SI](ds:si取得存储器中32位(双字),高16位作为段值送入DS中,低十六位送入指定的BX寄存器中)data segmentidata dd 12345678H data ends code segment assume cs:code,ds:…

设计模式(十五):解释器模式

一、定义 在设定环境中&#xff0c;定义一种规则或者语法&#xff0c;通过解释器来解释规则或者语法的含义. 二、实例&#xff1a;将 二十一 —> 21 2.1 设定我们的环境 Context public class Context{public string Input { get; set; }public int Output { get; se…

8086地址传送指令LEA,LDS,LES

LEA BX,[SI] ;BX<--DS:[SI]内存单元的偏移地址,与该单元中的数据无关 LDS BX,[SI] ;BX<--DS:[si]内存单元中的数据的低16位,DS<--内存单元中数据的高16位 LES BX,[SI] ;BX<--DS:[SI] ,ES<--DS:[SI2] 显然LDS和LES的操作数是32位的(两个字 四个字节 32位) 写个…

MySQL 5.7.10 免安装配置

# 配置环境&#xff1a;windows 64bit # 安装版本&#xff1a;mysql-5.7.10-win32&#xff08;zip archive版本&#xff09; 1. ZIP Archive版是免安装的&#xff0c;只需把mysql-5.7.10-win32.zip解压到安装目录即可。 2. 在D:\Program Files\mysql-5.7.10-win32文件夹下新建配…

Cacti安装教程

CentOS 6.0架设流量监控及集中日志系统第一章、cacti的安装1、 系统的基本设置2、 设置主机名3、 [rootlocalhost ~]# vi /etc/sysconfig/network4、 [rootlocalhost ~]# exit5、 重新登陆6、 [rootGZ-Cacti ~]#7、 安装screen后台运行程序yum -y install screen8、 安装优秀的…

8086条件转移指令JE,JZ

JZ/JE 指令格式 转移条件 说明 JZ/JE 标号 ZF1 等于0或相等转移code segment assume cs:codemov ax,2mov bx,2cmp ax,bxje ok ;如果axbx 进行转移(其实是检测ZF的值进行转移操作);根据ZF1 得出axbx ,所以才有axbx 相等则转移 iout: mov ax,4c00Hint 21H ok: add a…

单片机C语言下LCD多级菜单的一种实现方法

摘要: 介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑、实用的程序模型。 关键词: 液晶显示屏; 多级菜单; 单片机; C 语言; LCD  中图分类号:TP311. 1    文献标识码:B 收稿日期:2005 - 11 - 210  引言 由于C 语…

fortran语法笔记

1&#xff0c;数据类型&#xff0c;fortran支持整形&#xff0c;real型&#xff0c;logical型&#xff0c;char型&#xff0c;复数型。整形分为为长整形和短整形定义长整形的方法 同时声明多个变量的话可以用逗号隔开。 加两个冒号的话可以直接在声明的时候赋值。 fortran是唯一…

8086条件转移指令JNE,JNZ

JNZ/JNE 指令格式 转移条件 说明 JNZ/JNE 标号 ZF0 不等于0或不相等转移code segment assume cs:codemov ax,5mov bx,2cmp ax,bx ;两数比较 不相等则转移 jne ok iout: mov ax,4c00Hint 21H ok: add ax,bxjmp iout code ends endAX0005 BX0002 CX0013 DX0000 SP00…

8086条件转移指令JE/JZ,JNE/JNZ

JE/JZ,JNE,JNZ检测的只是ZF的值,只要ZF满足则进行转移 JE的逻辑含义是相等则转移 但是JE进行操作的是ZF1才执行所有相等则转移是通过CMP指令来配合使用体现出的CMP AX,BX ;ax-bx 结果是否为0 {true ,ZF1} {false ,ZF0} JE OK (ZF1说明两数相等) (ZF…

git 使用手册

git 作为开源项目首选版本管理软件&#xff0c;必然其优势不容小觑&#xff0c;下面总结一下初次解除用到的一些技能 1. 基本命令介绍 git help branch 查看branch帮助文档 git branch -a 列出当前所有分支 git branch good_proj 创建分支good_proj git checkout good_p…