日常开发中,app必须处理好用户连续点击的问题,因为短时间内的多次重复点击,不管是网络请求或者提交数据,都会重复,网络请求中虽然也可以设置过滤重复的提交,但当你点击一个按钮打开一个Activity,你就会打开多个了,设置Activity的启动模式是没有用处的。如果你还记得android的事件分发机制,你就发现出来很简单了。

1 android事件分发 借用网络上的一张图,可以发现事件分发是有个U型走势,无论什么事件,都是从Activity的dispatchTouchEvent()分发的,需要注意事件分发的返回值,false也会被消费的。

Android dialog点击事件 禁止连续点击 安卓防止多次点击_Time

/*
    * 防止短时间内多处点击
    * */
    @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。