闲话不多,直接干货
在我寻找之下,大概分为三种解决办法.
方法一:在点击事件的开始把它设为不可点击,再在点击事件的结束设置为可点击
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (()) {
case :
//这个是防止用户多次点击,造成方法多次执行,出现错误
(false);
//gowhere()方法是自己写的 点击事件想要执行的方法
gowhere();
//这个也是防止用户多次点击,造成方法多次执行,出现错误 与(false);相呼应
(true);
break;
default:
break;
}
}
优点:简单便利,易上手,,,,
缺点:如果gowhere()开启子线程 既没有多大用了 但是如果在子线程中 写(true);方法 会出现一种情况, 如果子线程执行方法执行中出现问题,执行不到这个方法,或者说是如果程序逻辑复杂多变 会出现很多种情况,既有接口回调,调用sdk 还有开启多个子线程 ,这个方法根本不行.
方法二:自定义点击事件 :设置每隔几秒才可以点击下一次
public abstract class NoDoubleClickListener implements OnClickListener {
//每隔5000点击一次 MIN_CLICK_DELAY_TIME 为设置的间隔单位是毫秒
public static final int MIN_CLICK_DELAY_TIME = 5000;
private long lastClickTime = 0;
@Override
public void onClick(View v) {
long currentTime = ().getTimeInMillis();
if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
lastClickTime = currentTime;
onNoDoubleClick(v);
}
}
protected void onNoDoubleClick(View v) {
}
}
在代码中调用:
//其中的button为自己布局中的按钮
button= (Button) findViewById();
(new NoDoubleClickListener() {
@Override
public void onNoDoubleClick(View v) {
(, "点击,,点击", Toast.LENGTH_SHORT).show();
}
});
这样就每隔5秒钟可以点击一次了
网上虽然有很多的例子 但是 总是少了 protected void onNoDoubleClick(View v) { }这一行代码. 也许初学者会有些疑问.
优点:两次点击每隔时间可以固定 避免了连续点击的执行的bug
缺点:两次点击之间的时间虽然固定,但是这个值 多少秒 这个值不好确定,如果时间长 用户体验太差,时间特别短,如果里面有子线程 可能子线程的还没执行完毕
方法三:
我们优雅一点,使用throttleFirst操作符来解决按钮被多次点击的问题,当然这涉及到RxJava了,
笔者没有研究这种办法,感觉这种办法不太常用吧.