參考:防止Android過快點擊造成多次事件的三種方法_胖胖的博客-CSDN博客
實作邏輯很簡單:
-
- 設定限定時間
- 在用戶點擊時開始計時
- 若計時未超過限定時間,則不允許觸發點擊事件
因還未學習過Rxjava,因此使用類似文中的第二種進行實作
完成后發現一個小問題:當多個控制元件系結一個 Listener 時,點擊 控制元件A 后會對 控制元件B 也會造成點擊限制;初步設想在自定義Listener類的時候多加一個對ID的判斷,這樣的話要另外設計一個能儲存ID和限定時間的資料結構了,
in OnMultiClickListener.java:
public abstract class OnMultiClickListener implements View.OnClickListener {
// 兩次點擊按鈕之間的點擊間隔不能少于指定時間
private static final int MIN_CLICK_DELAY_TIME = 5000;
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);
}
}
}
使用(使用的類不用繼承任何介面了):
public void initView() {
Button listBtn = findViewById(R.id.btn_toListView);
Button testBtn = findViewById(R.id.btn_test);
listBtn.setOnClickListener(multiClickListener);
testBtn.setOnClickListener(multiClickListener);
}
OnMultiClickListener multiClickListener = new OnMultiClickListener() {
@Override
public void onMultiClick(View v) {
switch (v.getId()) {
case R.id.btn_toListView:
Toast.makeText(mContext, "點擊 btn_toListView", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_test:
Toast.makeText(mContext, "點擊 btn_test", Toast.LENGTH_SHORT).show();
break;
default:
throw new IllegalStateException("Unexpected value: " + v.getId());
}
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/251660.html
標籤:Android
