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); 
相關問題