我正在开发一个 android 应用程序,我的操作栏中有一个刷新按钮。此按钮调用一个重新打开相同活动的函数。此活动包含一个用于加载内容的 asyncTask。
目前我遇到了这个问题。当我单击刷新按钮时它工作正常,但是如果我在 AsyncTask 仍在工作时单击刷新按钮(我有一个进度条来检查状态)应用程序崩溃。
我收到的错误是: NullPointerException
是否可以在活动(及其 AsyncTask)完全加载之前禁用该按钮?
我正在开发一个 android 应用程序,我的操作栏中有一个刷新按钮。此按钮调用一个重新打开相同活动的函数。此活动包含一个用于加载内容的 asyncTask。
目前我遇到了这个问题。当我单击刷新按钮时它工作正常,但是如果我在 AsyncTask 仍在工作时单击刷新按钮(我有一个进度条来检查状态)应用程序崩溃。
我收到的错误是: NullPointerException
是否可以在活动(及其 AsyncTask)完全加载之前禁用该按钮?
在您的按钮中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;
}
在您的 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) 通常也会改变按钮的外观。
您可以尝试从in禁用按钮并从onPreExecute
in启用按钮AsyncTask
onPostExecute
AsyncTask
您可以检查任务的状态....单击刷新按钮...
if(yourAsyncTaskObject != null && yourAsyncTaskObject.getStatus() != AsyncTask.Status.RUNNING){
then start your activity again here
}