2015-05-07 19 views
0

我知道这里有一百万个类似的问题,但这里提出的解决方案都没有解决我遇到的问题。我有一个AsyncTask加载数据库中的数据。数据加载时会显示不确定的ProgressDialog(即使在生产代码中,它永不需要明显的时间来加载数据库,但只是为了防止有人构建大数据库)。无法关闭活动回调中的progressDialog

我曾经打电话,直接从AsyncTask中解雇ProgressDialog,并且工作正常。问题是,我试图强化更好的问题分离,并且我决定在屏幕上显示内容并不属于AsyncTask的域,并且确实属于该活动。所以,我实现了一个回调接口的活动,并在活动中我有:

private ProgressDialog progressDialog; 

@Override 
public void onPreExecute() { 
    progressDialog = ProgressDialog.show(this,"","Loading. . .",true,true); 
} 

@Override 
public void onPostExecute() { 
    if (progressDialog != null) { 
     Logger.d("Dismissing progress dialog"); 
     progressDialog.dismiss(); 
     progressDialog = null; 
    } 
} 

logcat的显示,我达到这一记录仪线,但绝不ProgressDialog驳回。为什么我在回调中无法做到这一点有什么原因吗?

回答

1

最有可能发生的事情在这里是多个ProgressDialog的被实例化。

因此,尽管dismiss()调用成功,它不叫上ProgressDialog当前可见的屏幕上,而你失去了你参考这个明显的一个,因为你已经覆盖progressDialog一个新的对象实例。

尝试将Logger.d("New ProgressDialog");放在您要创建ProgressDialog的新实例的位置,并且您很可能会看到此方案已确认。

你也许可以通过使用Array/List跟踪所有ProgressDialog S的和解雇时,它的相应AsyncTask完成一个合适的解决这个问题,但我个人认为这是更令人费解然后你原来具有的做法每个AsyncTask处理他们自己的ProgressDialog的生命周期。

+0

你说得对。我已经移动了“AsyncTask”的创建,并且从不删除原始文件,因此它被创建了两次。 – TBridges42