Avoid button multiple rapid clicks

前端 未结 20 1458
猫巷女王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:15

    Based on @GreyBeardedGeek answer,

    • Create debounceClick_last_Timestamp on ids.xml to tag previous click timestamp.
    • Add This block of code into BaseActivity

      protected void debounceClick(View clickedView, DebouncedClick callback){
          debounceClick(clickedView,1000,callback);
      }
      
      protected void debounceClick(View clickedView,long minimumInterval, DebouncedClick callback){
          Long previousClickTimestamp = (Long) clickedView.getTag(R.id.debounceClick_last_Timestamp);
          long currentTimestamp = SystemClock.uptimeMillis();
          clickedView.setTag(R.id.debounceClick_last_Timestamp, currentTimestamp);
          if(previousClickTimestamp == null 
                || Math.abs(currentTimestamp - previousClickTimestamp) > minimumInterval) {
              callback.onClick(clickedView);
          }
      }
      
      public interface DebouncedClick{
          void onClick(View view);
      }
      
    • Usage:

      view.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              debounceClick(v, 3000, new DebouncedClick() {
                  @Override
                  public void onClick(View view) {
                      doStuff(view); // Put your's click logic on doStuff function
                  }
              });
          }
      });
      
    • Using lambda

      view.setOnClickListener(v -> debounceClick(v, 3000, this::doStuff));
      

提交回复
热议问题