【问题标题】:Disable button when clicked, then re-enable it单击时禁用按钮,然后重新启用它
【发布时间】:2017-07-20 12:03:34
【问题描述】:

我通过构建一个只有两个按钮 True 和 False 的简单测验应用程序开始了 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 在几秒钟后启用它们
  • 你想在你的代码中实际做什么?您是要在第一次单击后禁用这两个按钮还是要在一段时间后启用?如果您想在一段时间后启用,请使用带有后延迟方法的处理程序来重新启用它。

标签: java android button


【解决方案1】:

在 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);

【讨论】:

  • 完美。谢谢!
【解决方案2】:

使用

mTrueButton.setClickable(false);

而不是

mTrueButton.setEnable(false);

【讨论】:

    【解决方案3】:

    试试这个

    mTrueButton.setVisibility(View.INVISIBLE);
    
    mTrueButton.setVisibility(View.VISIBLE);
    

    【讨论】:

      【解决方案4】:
      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);
      

      【讨论】:

        【解决方案5】:

        试试这个

        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
            }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-04
          • 2021-03-18
          • 1970-01-01
          • 2021-08-03
          • 2017-08-06
          • 2020-11-08
          • 2017-09-26
          相关资源
          最近更新 更多