在用户使用 Android 应用的时候,经常会出现过快且多次点击同一按钮的情况,一方面这是因为应用或手机当前有些卡顿,另一方面也可能是由于很多应用并没有设置按钮点击时的 selector 或者其它按钮响应方式(例如点击按钮时按钮放大,常见于游戏),导致用户误认为没有点击到当前按钮,当然,除了相对应的对应用进行优化和设置点击selector以外,我们还可以做一些其它的工作,例如,判断按钮的 onClick 事件在规定事件段内只响应一次(在论坛的搜索功能中,我们常见到每10秒才可以进行一次搜索的设置,这就在一定程度上减少了无效的网络访问量,减轻服务器压力,APP同理),就如下面代码所示:
一、全局
1public class Utils { 2 // 两次点击按钮之间的点击间隔不能少于1000毫秒 3 private static final int MIN_CLICK_DELAY_TIME = 1000; 4 private static long lastClickTime; 5 6 public static boolean isFastClick() { 7 boolean flag = false; 8 long curClickTime = System.currentTimeMillis(); 9 if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) { 10 flag = true; 11 } 12 lastClickTime = curClickTime; 13 return flag; 14 } 15 }
使用1方法
1btn.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 if (Utils.isFastClick()) { 5 // 进行点击事件后的逻辑操作 6 } 7 }
单个按钮接口写法
1public abstract class OnMultiClickListener implements View.OnClickListener{ 2 // 两次点击按钮之间的点击间隔不能少于1000毫秒 3 private static final int MIN_CLICK_DELAY_TIME = 1000; 4 private static long lastClickTime; 5 6 public abstract void onMultiClick(View v); 7 8 @Override 9 public void onClick(View v) { 10 long curClickTime = System.currentTimeMillis(); 11 if((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) { 12 // 超过点击间隔后再将lastClickTime重置为当前点击时间 13 lastClickTime = curClickTime; 14 onMultiClick(v); 15 } 16 } 17 }
方法2使用
1btn.setOnClickListener(new OnMultiClickListener() { 2 @Override 3 public void onMultiClick(View v) { 4 // 进行点击事件后的逻辑操作 5 } 6 });