日常开发中,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。
本文介绍了如何在Android开发中处理用户连续点击问题,通过重写BaseActivity的dispatchTouchEvent方法,结合事件分发机制,避免短时间内多次点击导致的重复操作。通过记录上次点击时间并设定间隔阈值,有效防止了1秒内按钮的连续点击。此方法适用于网络请求和Activity跳转等场景,避免了不必要的资源消耗和用户体验问题。
1462

被折叠的 条评论
为什么被折叠?



