如何防止双击刷新按钮

时间:2013-07-25 09:39:33

标签: android android-asynctask android-activity android-button android-menu

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

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

我收到的错误是:NullPointerException

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

4 个答案:

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