在用戶使用 Android 應用的時候,常常會出現過快且屢次點擊同一按鈕的狀況,一方面這是由於應用或手機當前有些卡頓,另外一方面也多是因爲不少應用並無設置按鈕點擊時的 selector 或者其它按鈕響應方式(例如點擊按鈕時按鈕放大,常見於遊戲),致使用戶誤認爲沒有點擊到當前按鈕,固然,除了相對應的對應用進行優化和設置點擊selector之外,咱們還能夠作一些其它的工做,例如,判斷按鈕的 onClick 事件在規定事件段內只響應一次(在論壇的搜索功能中,咱們常見到每10秒才能夠進行一次搜索的設置,這就在必定程度上減小了無效的網絡訪問量,減輕服務器壓力,APP同理),就以下面代碼所示:服務器
1、全局網絡
public class Utils { // 兩次點擊按鈕之間的點擊間隔不能少於1000毫秒 private static final int MIN_CLICK_DELAY_TIME = 1000; private static long lastClickTime; public static boolean isFastClick() { boolean flag = false; long curClickTime = System.currentTimeMillis(); if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) { flag = true; } lastClickTime = curClickTime; return flag; } }
使用1方法ide
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (Utils.isFastClick()) { // 進行點擊事件後的邏輯操做 } }
單個按鈕接口寫法優化
public abstract class OnMultiClickListener implements View.OnClickListener{ // 兩次點擊按鈕之間的點擊間隔不能少於1000毫秒 private static final int MIN_CLICK_DELAY_TIME = 1000; private static long lastClickTime; public abstract void onMultiClick(View v); @Override public void onClick(View v) { long curClickTime = System.currentTimeMillis(); if((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) { // 超過點擊間隔後再將lastClickTime重置爲當前點擊時間 lastClickTime = curClickTime; onMultiClick(v); } } }
方法2使用spa
btn.setOnClickListener(new OnMultiClickListener() { @Override public void onMultiClick(View v) { // 進行點擊事件後的邏輯操做 } });