防止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())}

posted @ 2015-04-13 18:36  兔爷赏月  阅读(253)  评论(0编辑  收藏  举报