开发中,相信很多人都遇到重复提交的问题,很大部分情况是因为接口响应慢,前端点击事件未设置不可点击,导致用户点击的时候出现连续点击多次的操作。也有的是因为点击的时候弹出loading圈,可是弹出的慢了,导致多次点击被响应。
这个时候我们可能想到的操作就是,在用户点击的时候,将控件设置为不可点击,在请求响应之后,修改控件是否可点击的状态。在开发中,会有很多不同的点击事件,每个点击事件我们都要去修改控件是否可点击,繁琐不说,一直在Ctrl+C和 Ctrl+V。
这就给出简单便捷全局设置防重复点击的方法:
//上次点击的时间 Long lastClickTime; private Boolean isFastDoubleClick(){ //这次点击的时间 Long time = System.currentTimeMillis(); //计算两次时间差 Long timeD = time- lastClickTime; if (0<timeD && timeD<365){ LogUtils.i("isFastDoubleClick","FAST_DOUBLE_TIME="+timeD) return true; } lastClickTime = time; return false; }
在BaseActivity中重写 dispatchTouchEvent方法:
@Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN){ //判断两次点击事件的时间是否太短 if (Utils.isFastDoubleClick()){ return true; } } return super.dispatchTouchEvent(ev); }
在两次点击的时间差在365毫秒(这个值可以自己设置)内,都统一不响应。get到了没呢?是不是很简单