【问题标题】:How to disable button for 1 sec after clicked in Android?在Android中单击后如何禁用按钮1秒?
【发布时间】:2021-07-30 06:32:58
【问题描述】:

我正在使用以下代码来使用按钮。我工作了。(sendBtn 是片段中的一个按钮)

sendText = view.findViewById(R.id.send_text);
    View sendBtn = view.findViewById(R.id.send_btn);
        sendBtn.setOnClickListener(v -> send(sendText.getText().toString()));

现在我想在单击后禁用按钮 1 秒

我找到了以下解决方案但上面的代码工作 没有 onClick(View v)”方法和没有实现 类中的 View.OnClickListener。 如何在这种情况下提供延迟。。没有 onClick 方法的代码如何工作。

   @Override
    public void onClick(View v) {
        ((Button) findViewById(R.id.click)).setEnabled(false);

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                ((Button) findViewById(R.id.click))
                    .setEnabled(true);

            }
        }, 1000);

    }
});

【问题讨论】:

标签: android button postdelayed


【解决方案1】:

您可以使用CountDownTimer

CountDownTimewr timer = new CountDownTimer(1000, 1000) {

    public void onTick(long millisUntilFinished) {
    }

    public void onFinish() {
        // enable button
        ((Button) findViewById(R.id.click)).setEnabled(true);
    }
}

@Override
public void onClick(View v) {
        // disable btn and start timer of one second in millis
        ((Button) findViewById(R.id.click)).setEnabled(false);
        timer.start();
    }
});

【讨论】:

    【解决方案2】:

    当您想中断用户点击时使用此方法:

    private static long mLastClickTime = 0L;
    
    public static boolean isOpenRecently() {
        if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {
            return true;
        }
        mLastClickTime = SystemClock.elapsedRealtime();
        return false;
    }
    

    用法:

    if (v.getId() == R.id.sendBtn) {
            if (isOpenRecently()) return;
            // Your logic
        }
    

    【讨论】:

      【解决方案3】:

      请试试这个方法

      • Handler(Looper.getmainLooper()) 并在可运行线程中完成任务后删除回调...也尝试将此逻辑放在此类外部的任何方法中并从 setonclicklistener 调用

      • 用 timertask 试试 Timer.shedule

      • 您可以在其中使用 runOnUIThread 方法来更新 UI。

      • 您也可以尝试检查点击的时间差,并在循环中再次启用。

      【讨论】:

        【解决方案4】:

        基本上,您在代码中使用 lambda,其中 v-&gt;{} 代表 onCLick(View v) 函数。

        sendBtn.setOnClickListener(v -> send(sendText.getText().toString()));
        

        您可以执行以下操作以禁用按钮 1 秒

         void doOnSendButtonClick(View v){
            //Send the message (your logic here)
            send(sendText.getText().toString());
        
            //Disable button
            sendBtn.setEnabled(false);
        
            //enable button after 1000 millisecond
            new Handler(Looper.getMainLooper()).postDelayed(() -> {
                sendBtn.setEnabled(true);
            }, 1000);
        }
        

        当用户点击按钮时调用该方法

        sendButton.setOnClickListener(view -> doOnSendButtonClick(view));
        

        【讨论】:

          猜你喜欢
          • 2015-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-24
          • 2019-10-25
          • 1970-01-01
          • 2021-10-20
          • 2016-07-15
          相关资源
          最近更新 更多