我正在开发一个Android应用程序,我的操作栏中有一个刷新按钮。此按钮调用重新打开相同活动的函数。此活动包含用于加载内容的asyncTask。
目前我遇到了这个问题。当我点击刷新按钮它工作正常,但如果我在AsyncTask仍在工作时点击刷新按钮(我有一个进度条来检查状态)应用程序崩溃。
我收到的错误是:NullPointerException
是否可以在活动(及其AsyncTask)完全加载之前禁用该按钮?
答案 0 :(得分:1)
在您执行OnClickListener
的按钮AsyncTask
中,添加以下代码:
button.setEnabled(false);
在onPostExecute()
的{{1}}方法中,放置此内容:
AsyncTask
如果您还为用户提供了“取消”选项(例如,如果您已在button.setEnabled(true);
中覆盖了onCancelled()
方法),请启用AsyncTask
中的按钮。
修改1 :
在您的活动中声明onCancelled()
标志:
boolean
在boolean menuButtonIsEnabled = true;
中,将此标记设为false:
OnClickListener
menuButtonIsEnabled = false;
的{{1}}方法:
onPostExecute()
覆盖活动中的AsyncTask
方法:
menuButtonIsEnabled = true;
答案 1 :(得分:1)
在onClickListener中,您要做的第一件事就是停用按钮。这样,在重新激活之前无法再次单击它:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View target) {
target.setClickable(false);
target.setEnbled(false);
// Start your asynctask
}
}
在您的AsyncTask.onPostResult()中,您可以重新激活按钮上的点击。
Nota:setClickable(false)阻止按钮对点击事件作出反应,但setEnabled(false)通常也会改变按钮的外观。
答案 2 :(得分:0)
您可以尝试<{1}}中的onPreExecute
启用按钮启用 AsyncTask
onPostExecute
中的按钮}}
答案 3 :(得分:0)
您可以检查任务的状态....点击刷新按钮...
if(yourAsyncTaskObject != null && yourAsyncTaskObject.getStatus() != AsyncTask.Status.RUNNING){
then start your activity again here
}