【问题标题】:Prevent double click on OnClickListener防止双击 OnClickListener
【发布时间】:2019-02-05 23:35:15
【问题描述】:

我试图阻止用户点击我的按钮两次。我试图在我的脚本上使用setEnabled,但没有任何反应!我的问题是,我尝试在setOnClickListener 中执行此操作。

有人可以帮我找到一个解决方案,以防止在所有内容上传到服务器时点击吗?

newPostBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // I want to set my button to enabled false here
    }
}

【问题讨论】:

    标签: java android button onclicklistener double-click


    【解决方案1】:

    1) 创建一个实例变量:

     private int buttonClicks;
    

    2) 在 onCreate 中实例化你的变量

     buttonClicks = 0;
    

    3) 在 onClickListener 中设置 if() 语句

    newPostBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) { 
                if (buttonClicks == 1){
                   buttonClicks = 0;
                   //do nothing
                   } else {
    
                    //run code
                    }
                       buttonClicks++;
    

    【讨论】:

      【解决方案2】:

      为什么不使用setOnAction?

      newPostBtn.setOnAction(e -> {
          (your logic goes here)
      
          newPostBtn.setEnabled(false);
      }) ;
      

      【讨论】:

        【解决方案3】:

        以下是解决此问题的三种方法:

        禁用带有setEnabled(false) 的按钮,直到用户再次单击它是安全的。

        Above给定的解决方案也是一种解决方法。

        另一种解决方案是

        private long lastClickTime = 0;
        
        View.OnClickListener buttonHandler = new View.OnClickListener() {
            public void onClick(View v) {
                // preventing double, using threshold of 1000 ms
                if (SystemClock.elapsedRealtime() - lastClickTime < 1000){
                    return;
                }
        
                lastClickTime = SystemClock.elapsedRealtime();
            }
        }
        

        【讨论】:

          【解决方案4】:

          有时下一个屏幕/操作需要时间来执行,并且频繁点击或点击视图会多次执行下一个屏幕/操作。我通过计算两次点击之间的时间解决了这个问题。请在下面找到代码示例:

          button.setOnClickListener(new OnClickListener() {
              @Override
              public void onClick(View v) {
                  // mis-clicking prevention, using threshold of 1000 ms
                  if (SystemClock.elapsedRealtime() - mLastClickTime < 1000){
                      return;
                  }
                  mLastClickTime = SystemClock.elapsedRealtime();
          
                  // do your action here
              }
          }
          

          【讨论】:

            【解决方案5】:

            你也可以试试setClickable

            在 Android 中,不可点击的小部件不会响应点击事件

            view.setClickable(false);

            newPostBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                    v.setClickable(false);
            
            // I want to set my button to enabled false here
            }}
            

            【讨论】:

              猜你喜欢
              • 2011-09-11
              • 2016-07-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-11
              • 2014-10-01
              • 2018-06-14
              相关资源
              最近更新 更多