b.setOnClickListener(new OnClickListener()) {
public void onClick(View arg0) {
try{
Thread.sleep(10000);
}catch(Exception e){}
}
});
在上面的代码中,在 Therad 工作之前,我不想再采取任何按钮操作。目前,当我一次又一次地按下应用程序要求强制关闭或等待时。我不希望这样,而是我不喜欢再对此按钮执行操作。
需要帮助。谢谢
添加一个全局布尔值,并在单击它时将其设置为 true。在按钮单击中检查它。如果已设置,则返回,否则运行线程。在线程结束时,再次将其设置为 false。
单击布尔值 = 假;
b.setOnClickListener(new OnClickListener()) {
public void onClick(View arg0) {
if( clicked )
return;
try{
clicked = true;
Thread.sleep(10000);
}catch(Exception e){}
}
});
设置单击=当您从睡眠状态返回时为假。
最好将 AsyncTask 用于您的作品。并根据您的要求使用get()
AsyncTask
方法。
假设在按钮的单击execute()
AsyncTask
并在等待get()
后禁用按钮AsyncTask
,这将在 AsyncTask 完成后返回Result
,而在结果上只需再次启用您的按钮。因此,您可以避免在"活动"中出现ANR
。
在处理前一种点击时,至少有两种方法可以阻止进一步的点击:
1(在开始时禁用按钮,并在onClick
结束时重新启用:
b.setOnClickListener(new OnClickListener()) {
public void onClick(View arg0) {
b.setEnabled(false);
//do your stuff
b.setEnabled(true);
}
});
2(在onClick
的开头设置一个标志,并在最后清除它:
(班级级别(
boolean isInOnClick = false;
然后
b.setOnClickListener(new OnClickListener()) {
public void onClick(View arg0) {
if(!isInOnClick) {
isInOnClick = true;
//do your stuff
isInOnClick = false;
}
}
});