2013-04-29 93 views
1

我知道如何禁用按钮以防止它被点击两次。但是,如果我想再次启用它,只要它的安全,我可以做这样的事情,我在onclick调用setenabled(true)?只要setenabled(false)被调用,该按钮被禁用,还是仅在onclick函数完成后才会禁用按钮?安卓按钮及其工作方式

button.setOnclickListener(new View.onClickListener(){ 

      public void onClick(View v) { 
       button.setEnabled(false); 
       /// do stuff 
       button.setEnabled(true); 
      } 
    }); 
+0

是的。你可以做那件事。而不是“按钮”使用“v”(视图v)。覆盖被单击的函数返回视图。 – 2013-04-29 06:44:27

+0

你想要你的按钮点击一次或twise – Unknown 2013-04-29 07:02:21

回答

3

为什么不简化?

使用boolean作为检查进程何时运行的标志。如果它正在运行,请不要运行它,直到先前的过程没有完成。

下面的代码示例将确保任务运行时,onClickListener()将不会触发。无需担心禁用,然后再次启用它。

编辑:

长时间的讨论(在评论)后,用Zabri。只是为了踢球,我尝试了我最初发布的解决方案。事实证明,毕竟他是。 :-(

我错了初步解决方案(这是未经测试,但嘘呼对我来说),所以时间大吃起来,并张贴工作和测试解决方案。

全部道具Zabri用于指出在代码中明显的缺陷:-)

例如(测试的代码):

boolean taskRunning = false; 
button1.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     if (taskRunning == false) { 

      // TOGGLE THE boolean HERE TO INDICATE RUNNING 
      taskRunning = true; 

      ///do stuff 

      // TOGGLE THE boolean HERE TO INDICATE TASK COMPLETED 
      taskRunning = false; 

     } 

    } 
}); 

如上所述,这是未经测试的代码。我只是在这里输入。

+2

是的,这是一个更简单的解决方案。 – Lucifer 2013-04-29 06:54:51

+1

这不仅是一个更简单的解决方案,我甚至不认为它会起作用。 'taskRunning'在开头是_false_。所以'OnClickListener'被设置为''按钮'。当'button'被点击时,是什么阻止它再次被点击? 'OnClickListener'仍然被设置。如我错了请纠正我。 – zbr 2013-04-29 07:06:23

+0

另外,你可以不写'if(something == true)',而是写'if(something)'。 – zbr 2013-04-29 07:08:32