2011-04-16 86 views
0

我有一个Tabhost活动,所有选项卡都由活动表示,其中一个名为BrowserTab。Android ProgressDialog:泄漏窗口

所有这些活动都遵守Observable类Data。

在BrowserTab中,我调用Data中的一个方法,它从互联网上检索一些数据。 我想用ProgressDialog通知用户调用这个方法。 我试着这样说:

在BrowserTab:

public void loadXML(){ 
    progressDialog = ProgressDialog.show(this, "", "Loading. Please wait...", true); 
    data.loadXML(getUrl()); 
} 

public void update(Observable o, Object arg) 
{ 
    progressDialog.dismiss(); 
} 

数据:

public void loadXML(String url) 
{ 
    this.xml = new XMLParser().parse(url); 
    setChanged(); 
    notifyObservers(); 

} 

与此类似,ProgressDialog出现加载后,立即再次dissapear。

当我在Data中的loadXML(String url)方法中创建一个新的线程时,当观察者被通知时,我得到一个“Activity has leaked window”异常。

我已经寻找解决这个问题的方法,但我无法弄清楚如何解决这个问题。 任何想法?

回答

0

答案是使用this.getApplicationContext(),而不是

progressDialog = ProgressDialog.show(this.getApplicationContext(), "", "Loading. Please wait...", true); 

更多的解释是在这里:

ProgressDialog : how to prevent Leaked Window

编辑

嗯,我后来发现 this.getApplicationContext()

总是等于零,所以我用DialogFragment并添加进度给它,而不是使用普通ProgressDialog

0

尝试使用这种改变你的代码..

progressDialog = ProgressDialog.show(getParent(), "", "Loading. Please wait...", true);