我知道如何禁用按钮,以防止它被点击两次。然而,如果我想再次启用它,只要它安全,我可以做类似的事情,我调用setenabled(true)在onclick??是一调用setenabled(false)就禁用按钮,还是只在onclick函数完成时禁用?
button.setOnclickListener(new View.onClickListener(){
public void onClick(View v) {
button.setEnabled(false);
/// do stuff
button.setEnabled(true);
}
});
为什么不简单一点呢?
使用boolean
作为检查进程何时运行的标志。如果它正在运行,在前面的进程没有完成之前不要运行它。
下面的代码示例将确保当任务运行时,OnClickListener()
将不会触发。不需要担心禁用然后再启用它。
编辑:
经过长时间的讨论(在评论中),与Zabri。只是为了好玩,我尝试了我最初发布的解决方案。事实证明,他是对的。:-(
我错了最初的解决方案(这是未经测试的,但对我来说是boo hoo)。因此,是时候来学习并发布一个工作的、经过测试的解决方案了。
完全支持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个片段,它们都包含EditText。(红色编辑文本来自底部片段) 当我点击软键“下一步”按钮时,光标应该移动到第二个编辑文本,但它跳到了底部片段编辑文本。 如果我使用“fragmentManager”。replace(new TopFragment())',因此堆栈中只有一个片段,没有问题,光标移动到第二个编辑文本。 “碎片Manager.replace(...)”不是一个解决方案,
我的多线程概念很弱,正在努力学习。 在Java中,我所知道的是,我们不能多次调用线程: 据我所知,当您再次调用时,它会引发异常,因为线程的关联堆栈一旦退出方法,并且您再次尝试初始化时就会被破坏。 在那种情况下,我对线程池的了解是,它给出了更好的性能&节省了时间,因为不需要创建新线程(我在这里读到)。 如果在线程池场景中不需要创建新的线程,那么它是如何与刚完成其run方法的同一线程一起工作的,该线程
我有一个问题使添加到购物车按钮工作。不确定是哪一部分代码导致了这个问题。但是,问题的链接是:https://barkerbespoke.com/collections/tie-collection/products/black-wool 你有什么建议?
我面临commandButton的问题,它只有在类型为submit时才起作用。有没有人可以看一下,让我知道是否有解决办法?下面的代码非常简单,并有足够的建议来说明我需要什么。方法test()未执行。方法runSubmit已成功执行。 我需要测试方法在没有提交的情况下执行,因为原始页面确实在提交期间执行了验证,test()方法必须在没有提交的情况下执行,因为这是提交之前的一个初步操作。 我正在使用P
我写了下面的函数(当我读里奇关于C的书时),从命令行获取一行。它做了它应该做的事情,我理解它是如何工作的,但我想深入一点。 我的问题是关于循环的,假设我们有一个空白命令行,它正在等待用户输入内容,因为第一个getchar()在循环中被调用,假设用户输入了以下内容: 我猜接下来会发生什么,是getchar()在arr[]中存储“h”,而用户实际上没有按回车键。 因此如果用户继续键入: 'h''e''