【Android】關於連續屢次點擊控件的控制方案(新建監聽類)

參考:防止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());
            }
        }
    };
相關文章
相關標籤/搜索