执行某些操作时删除所有侦听器

时间:2014-08-24 16:23:35

标签: android onclicklistener

我有一个带有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时执行的所有点击都将被忽略。 我怎么办?

2 个答案:

答案 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...        
    }
}