日常开发中,app必须处理好用户连续点击的问题,因为短时间内的多次重复点击,不管是网络请求或者提交数据,都会重复,网络请求中虽然也可以设置过滤重复的提交,但当你点击一个按钮打开一个Activity,你就会打开多个了,设置Activity的启动模式是没有用处的。如果你还记得android的事件分发机制,你就发现出来很简单了。
1 android事件分发 借用网络上的一张图,可以发现事件分发是有个U型走势,无论什么事件,都是从Activity的dispatchTouchEvent()分发的,需要注意事件分发的返回值,false也会被消费的。
/*
* 防止短时间内多处点击
* */
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN){
if (isClick()){
return super.dispatchTouchEvent(ev);
}else {
return true;
}
}
return super.dispatchTouchEvent(ev);
}
/**
* 点击1秒内不能连续点击
*/
public boolean isClick() {
if ((System.currentTimeMillis() - exitTime) > EXITTIME) {
exitTime = System.currentTimeMillis();
return true;
} else {
return false;
}
}
总结:在你项目的BaseActivity中,重写dispatchTouchEvent,如果为down事件,就判断当前点击时间和上次点击的时间,我设置的是500ms,重点是如果点击事件是可以分发的,需要返回super。