1.概況:
? 在app 使用中經常遇到界面中按鈕 點擊時 連續(xù)點擊兩次或者多次,導致按鈕下邏輯功能重復執(zhí)行,造成資源浪費甚至程序出錯,為了盡量避免這種情況出現,提出防抖動方法。
2.實現思路
<1.? 主要思路為 通過兩次點擊的時間差,來對比是否在最短時間內,來判斷點擊是否有效。
<2. 不同view 通過對比當前點擊View 的id 判斷是否是同一個view,如果是同一個view 進行防抖動校驗,如果不是同一個view,重置當前校驗。
3.代碼實現
public class NoDoubleClickUtil {
? ? public static int mId = -1;
? ? private static long mFirstClickTime;//記錄首次點擊時間
? ? public static boolean checkDoubleClick(int id) {
? ? ? ? long clickTime = System.currentTimeMillis();//記錄當前點擊時間
? ? ? ? if (mId == -1 || mId != id) {//不同view,重置
? ? ? ? ? ? mId = id;
? ? ? ? ? ? mFirstClickTime = clickTime;
? ? ? ? ? ? return true;
}
? ? ? ? if (clickTime - mFirstClickTime > Constant.NO_DOUBLE_CLICK_TIME) {
? ? ? ? //判斷當前時間差是否大于校驗時長,如果大于 判斷為此次不是無效點擊
? ? ? ? ? ? mFirstClickTime = clickTime;
? ? ? ? ? ? return true;
? ? ? ? } else {
? ? ? ? ? ? return false;
}
}
}
4.代碼中使用
@OnClick({R.id.tv_text1, R.id.tv_text2})
public void onViewClicked(View view) {
? ? if (!NoDoubleClickUtil.checkDoubleClick(view.getId())) {//判斷如果是錯誤點擊,直接返回,不執(zhí)行操作
? ? ? ? return;
}
? ? switch (view.getId()) {
? ? ? ? case R.id.tv_text1:
? ? ? ? ? ? ToastUtils.showShortToast(MyApplication.mContext, "點擊1:" + System.nanoTime());
? ? ? ? ? ? break;
? ? ? ? case R.id.tv_text2:
? ? ? ? ? ? ToastUtils.showShortToast(MyApplication.mContext, "點擊2:" + System.nanoTime());
? ? ? ? ? ? break;
}
}