Avoid button multiple rapid clicks

前端 未结 20 1467
猫巷女王i
猫巷女王i 2020-11-28 02:55

I have a problem with my app that if the user clicks the button multiple times quickly, then multiple events are generated before even my dialog holding the button disappear

20条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-28 03:02

    Here is a pretty simple solution, which can be used with lambdas:

    view.setOnClickListener(new DebounceClickListener(v -> this::doSomething));
    

    Here is the copy/paste ready snippet:

    public class DebounceClickListener implements View.OnClickListener {
    
        private static final long DEBOUNCE_INTERVAL_DEFAULT = 500;
        private long debounceInterval;
        private long lastClickTime;
        private View.OnClickListener clickListener;
    
        public DebounceClickListener(final View.OnClickListener clickListener) {
            this(clickListener, DEBOUNCE_INTERVAL_DEFAULT);
        }
    
        public DebounceClickListener(final View.OnClickListener clickListener, final long debounceInterval) {
            this.clickListener = clickListener;
            this.debounceInterval = debounceInterval;
        }
    
        @Override
        public void onClick(final View v) {
            if ((SystemClock.elapsedRealtime() - lastClickTime) < debounceInterval) {
                return;
            }
            lastClickTime = SystemClock.elapsedRealtime();
            clickListener.onClick(v);
        }
    }
    

    Enjoy!

提交回复
热议问题