防止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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值