点击按钮后禁用它,然后再重新启用。

5

我正在通过构建一个只有两个按钮(真和假)的简单测试应用程序来开始Android开发。该应用程序显示一个Toast,指出答案是正确还是错误。
我想要做的是在任何一个按钮被点击/轻触后立即禁用这两个按钮,然后在Toast被显示后重新启用它们。这是我在按钮监听器中尝试的:

mFalseButton.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v){
            mTrueButton.setEnabled(false);
            mFalseButton.setEnabled(false);

            checkAnswer(false); //Display the appropriate Toast

            mTrueButton.setEnabled(true);
            mFalseButton.setEnabled(true);
        }
    });

这个并不起作用。我的按钮在被点击/轻触后从未被禁用。我应该如何正确实现?任何帮助将不胜感激。


检查完答案后,它们不会立即被禁用,而是会重新启用。您可以使用Handler和postDelayed,在几秒钟后再次启用它们。 - fbwnd
你在代码中想实际做什么?你是想在第一次点击后禁用两个按钮,还是想在一段时间后启用它们?如果你想在一段时间后启用它们,那么使用带有 post delay 方法的 handler 来重新启用它们。 - Mohd Saquib
https://dev59.com/HmUo5IYBdhLWcg3w_DlK - Pushan Gupta
5个回答

6

在1500毫秒后使用以下类似的处理程序启用。

mTrueButton.setEnabled(false);
mFalseButton.setEnabled(false);

checkAnswer(false); //Display the appropriate Toast

new Handler().postDelayed(new Runnable() {
  @Override
  public void run() {
      mTrueButton.setEnabled(true);
      mFalseButton.setEnabled(true);
  }
}, 1500);

1
完美。谢谢! - craig-nerd

4

使用

mTrueButton.setClickable(false);

替代

mTrueButton.setEnable(false);

1

试试这个

mTrueButton.setVisibility(View.INVISIBLE);

mTrueButton.setVisibility(View.VISIBLE);

1
private static final ScheduledExecutorService worker =
            Executors.newSingleThreadScheduledExecutor();


  checkAnswer(false);
  Runnable task = new Runnable() {
            public void run() {
        mTrueButton.setEnabled(true);
        mFalseButton.setEnabled(true);
  mFalseButton.setEnabled(true);
            }
        };
        worker.schedule(task, 3000, TimeUnit.MILLISECONDS);

1
尝试这个。
mFalseButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mTrueButton.setEnabled(false);
        mFalseButton.setEnabled(false);

        checkAnswer(false); //Display the appropriate Toast


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

            @Override
            public void run() {
            // This method will be executed once the timer is over
                mTrueButton.setEnabled(true);
                mFalseButton.setEnabled(true);

            }
        },2000);// set time as per your requirement in millisecinds
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接