为了对付拥有麒麟臂的测试人员或者用户对我们的按钮等控件展开惨无人道的快速啄击。厮以为可以用如下方法:
1 setEnabled 大法;在用户点击发生后调用setEnable(false);阻止持续受到伤害。而onClick中的处理逻辑执行完后再调用setEnable(true);进行迎击。此法代码多,且逻辑难处理,不推荐。
2 DoubleKill 大法;对于一些不想改动现有逻辑的童鞋可以选用该方法,样例如下:
定义: public final class DoubleKill { final static long CLICK_INTERVAL = 500L;// 允许的快速点击间隔 private final static HashMap<Integer, Long> mLastClickTime = new HashMap(); static long lastTime(int key) { return mLastClickTime.containsKey(key) ? mLastClickTime.get(key) : 0L; } static void lastTime(int key, long lastTime) { mLastClickTime.put(key, lastTime); } public static boolean isFastDoubleClick(View view) { int key = view.hashCode(); long currTime = System.currentTimeMillis(); if (currTime - lastTime(key) < CLICK_INTERVAL) { return true; } else { lastTime(key, currTime); return false; } } } 调用: view.setOnClickListener(new View.OnClickListener(){ public void onClick(View view){ if(DoubleKill.isFastDoubleClick(view)){ return; } // 其他代码。。。。 } });