onClick()事件是Android中常见的回调事件,一般正常情况下在很短的时间内只会点击一次Button,但如果用户手机比较卡顿,短时间内多次点击按钮可能多次事件响应,从而出现一些问题。例如:多次点击导致的多次网络请求,多次点击导致打开同一个actvity,多次点击跳转webView导致session丢失问题,等等。通过以下方法处理:
方法一:通过简单的回调功能处理。
1、自定义一个NoDoubleClickListener,继承自OnClickListener:
public abstract class NoDoubleClickListener implements View.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);
}
}
protected abstract void onNoDoubleClick(View v);
}
2、在设置点击事件时用将方法OnClickListener替换为NoDoubleClickListener,并且实现方法onNoDoubleClick替换onClick即可:
buttonPay.setOnClickListener(new NoDoubleClickListener() {
@Override
protected void onNoDoubleClick(View v) {
//执行点击事件
}
});
方法二:使用RxJava的throttleFirst操作符,通过简洁的链式调用来解决按钮被多次点击的问题。
RxView.clicks(buttonPay)
.throttleFirst(1, TimeUnit.SECONDS)
.subscribe(new Observer() {
@Override
public void onCompleted() {
//
}
@Override
public void onError(Throwable e) {
//
}
@Override
public void onNext(Object o) {
//
}
});
更多参考资料:
http://blog.csdn.net/zhyxuexijava/article/details/51597230