How to avoid multiple button click at same time in android?

前端 未结 12 2052
太阳男子
太阳男子 2020-12-02 09:05

I\'m using two button in view. While clicking two button simultaneously it will goes to different activity at a time. How to avoid this?

I have tried like this, But

12条回答
  •  长情又很酷
    2020-12-02 09:47

    Here's a class that debounce's clicks for View and MenuItem.

    import android.os.SystemClock;
    import android.support.annotation.NonNull;
    import android.support.v7.widget.Toolbar.OnMenuItemClickListener;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    
    /**
     * Debounce's click events to prevent multiple rapid clicks.
     * 

    * When a view is clicked, that view and any other views that have applied {@link #shareDebounce} to them, * will have subsequent clicks ignored for the set {@link #DEBOUNCE_DURATION_MILLIS duration}. */ public final class ClickEvent { private static final long DEBOUNCE_DURATION_MILLIS = 1000L; private long debounceStartTime = 0; /** * Wraps the provided {@link OnClickListener OnClickListener} in a {@link ClickEvent} * that will prevent multiple rapid clicks from executing. *

    * Usage: *

    View.setOnClickListener(ClickEvent.debounce((OnClickListener) v -> // click listener runnable))
    */ public static OnClickListener debounce(@NonNull OnClickListener onClickListener) { return new ClickEvent().wrapOnClickListener(onClickListener); } /** * Wraps the provided {@link OnMenuItemClickListener OnMenuItemClickListener} in a * that will prevent multiple rapid clicks from executing. *

    * Usage: *

    MenuItem.setOnClickListener(ClickEvent.debounce((OnMenuItemClickListener) v -> // click listener runnable))
    */ public static OnMenuItemClickListener debounce(@NonNull OnMenuItemClickListener onClickListener) { return new ClickEvent().wrapOnClickListener(onClickListener); } /** * Allows the debounce to be shared between views to prevent multiple rapid clicks between views. *

    * Usage: *

         *     ClickEvent clickEvent = new ClickEvent();
         *     View1.setOnClickListener(clickEvent.shareDebounce((OnClickListener) v -> // click listener runnable for View1))
         *     View2.setOnClickListener(clickEvent.shareDebounce((OnClickListener) v -> // click listener runnable for View2))
         * 
    */ public OnClickListener shareDebounce(@NonNull OnClickListener listener) { return wrapOnClickListener(listener); } /** * Allows the debounce to be shared between views to prevent multiple rapid clicks between views. * Usage: *
         *     ClickEvent clickEvent = new ClickEvent();
         *     MenuItem1.setOnClickListener(clickEvent.shareDebounce((OnMenuItemClickListener) v -> // click listener runnable for MenuItem1))
         *     MenuItem2.setOnClickListener(clickEvent.shareDebounce((OnMenuItemClickListener) v -> // click listener runnable for MenuItem2))
         * 
    */ public OnMenuItemClickListener shareDebounce(@NonNull OnMenuItemClickListener listener) { return wrapOnClickListener(listener); } public void setDebounceStartTime() { debounceStartTime = SystemClock.elapsedRealtime(); } public boolean isThrottled() { return SystemClock.elapsedRealtime() - debounceStartTime < DEBOUNCE_DURATION_MILLIS; } private OnClickListener wrapOnClickListener(@NonNull OnClickListener onClickListener) { if (onClickListener instanceof OnThrottledClickListener) { throw new IllegalArgumentException("Can't wrap OnThrottledClickListener!"); } return new OnThrottledClickListener(this, onClickListener); } private OnMenuItemClickListener wrapOnClickListener(@NonNull OnMenuItemClickListener onClickListener) { if (onClickListener instanceof OnThrottledClickListener) { throw new IllegalArgumentException("Can't wrap OnThrottledClickListener!"); } return new OnThrottledClickListener(this, onClickListener); } private static class OnThrottledClickListener implements OnClickListener, OnMenuItemClickListener { private final ClickEvent clickEvent; private OnClickListener wrappedListener; private OnMenuItemClickListener wrappedMenuItemClickLister; OnThrottledClickListener(@NonNull ClickEvent clickEvent, @NonNull OnClickListener onClickListener) { this.clickEvent = clickEvent; this.wrappedListener = onClickListener; } OnThrottledClickListener(@NonNull ClickEvent clickEvent, @NonNull OnMenuItemClickListener onClickListener) { this.clickEvent = clickEvent; this.wrappedMenuItemClickLister = onClickListener; } @Override public void onClick(View v) { if (clickEvent.isThrottled()) { return; } wrappedListener.onClick(v); clickEvent.setDebounceStartTime(); } @Override public boolean onMenuItemClick(MenuItem menuItem) { if (clickEvent.isThrottled()) { return false; } clickEvent.setDebounceStartTime(); return wrappedMenuItemClickLister.onMenuItemClick(menuItem); } } }

提交回复
热议问题