1

我正在开发一个 android 应用程序,我的操作栏中有一个刷新按钮。此按钮调用一个重新打开相同活动的函数。此活动包含一个用于加载内容的 asyncTask。

目前我遇到了这个问题。当我单击刷新按钮时它工作正常,但是如果我在 AsyncTask 仍在工作时单击刷新按钮(我有一个进度条来检查状态)应用程序崩溃。

我收到的错误是: NullPointerException

是否可以在活动(及其 AsyncTask)完全加载之前禁用该按钮?

4

4 回答 4

1

在您的按钮中OnClickListener,从您执行 的地方AsyncTask,添加以下代码:

button.setEnabled(false);

onPostExecute()你的方法中AsyncTask,放置这个:

button.setEnabled(true);

如果您还向用户提供了“取消”选项(即,如果您已覆盖 中的onCancelled()方法AsyncTask),请启用 中的按钮onCancelled()

编辑 1

在您的活动中声明一个boolean标志:

boolean menuButtonIsEnabled = true;

在您的OnClickListener中,将此标志设置为 false:

menuButtonIsEnabled = false;

onPostExecute()您的方法中AsyncTask

menuButtonIsEnabled = true;

覆盖onPrepareOptionsMenu(Menu)活动中的方法:

@Override
public boolean onPrepareOptionsMenu (Menu menu){
    super.onPrepareOptionsMenu(menu);

    MenuItem button = menu.findItem(R.id.whatever_menu_button);

    if(menuButtonIsEnabled){
        button.setEnabled(true);
    } else {
        button.setEnabled(false);
    } 
    return true; 
}
于 2013-07-25T09:42:55.560 回答
1

在您的 onClickListener 中,您要做的第一件事就是停用按钮。这样,在您重新激活它之前无法再次单击它:

button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View target) {
        target.setClickable(false);
        target.setEnbled(false);
        // Start your asynctask
    }
}

在您的 AsyncTask.onPostResult() 中,您可以重新激活单击按钮。

注意: setClickable(false) 阻止按钮对点击事件做出反应,但 setEnabled(false) 通常也会改变按钮的外观。

于 2013-07-25T09:44:11.050 回答
0

您可以尝试从in禁用按钮并从onPreExecutein启用按钮AsyncTaskonPostExecuteAsyncTask

于 2013-07-25T09:43:07.553 回答
0

您可以检查任务的状态....单击刷新按钮...

if(yourAsyncTaskObject != null && yourAsyncTaskObject.getStatus() != AsyncTask.Status.RUNNING){
         then start your activity again here
    }
于 2013-07-25T09:43:45.453 回答