我有一个带有OnClickListener的按钮(名为button1),单击按钮后,应该执行任务,按钮应该变为不可点击,直到任务完成。这是我的代码:
@Override
public void onClick(View v) {
removeListeners();
executeMyTask();
addListeners();
}
private void disableListeners() {
button1.setOnTouchListener(null);
button2.setOnClickListener(null);
}
private void enableListeners() {
button1.setOnTouchListener(this);
button2.setOnClickListener(this);
}
现在碰巧,如果我在executeMyTask运行时单击按钮(所以当禁用侦听器时),当任务完成时,再次调用onClick。 我希望在执行executeMyTask时执行的所有点击都将被忽略。 我怎么办?
答案 0 :(得分:0)
为什么不用以下方法禁用整个按钮:
button1.setEnabled(false);
button2.setEnabled(false);
稍后再重新启用它们:
button1.setEnabled(true);
button2.setEnabled(true);
用户可以更轻松地了解该按钮目前无法点击。
答案 1 :(得分:0)
有两种方式:
1)禁用所有其他按钮
@Override
public void onClick(View v) {
setButtonEnabled(false);
executeMyTask();
setButtonEnabled(true);
}
private void setButtonEnabled(boolean enable) {
// TODO Auto-generated method stub
btn_1.setEnabled(enable);
btn_2.setEnabled(enable);
btn_3.setEnabled(enable);
}
2)使用布尔值来记录异步任务是否正在运行:
喜欢:
@Override
public void onClick(View v) {
removeListeners();
executeMyTask();
addListeners();
}
// And in executeMyTask
onPreExecute(){
....
..
isAsyncRunning = true;
..
....
}
onPostExecute(){
....
..
isAsyncRunning = false;
..
....
}
//And in Button Click Listeners
{
if(!isAsyncRunning){
// Do something...
}
}