參考:防止Android過快點擊形成屢次事件的三種方法_胖胖的博客-CSDN博客
java
因還未學習過Rxjava,所以使用相似文中的第二種進行實現數據結構
完成後發現一個小問題:當多個控件綁定一個 Listener 時,點擊 控件A 後會對 控件B 也會形成點擊限制;初步設想在自定義Listener類的時候多加一個對ID的判斷,這樣的話要另外設計一個能儲存ID和限定時間的數據結構了。ide
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); } } }
使用(使用的類不用繼承任何接口了):spa
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()); } } };