2011-09-18 24 views
1

我正在使用ProgressDialog在Thread運行時顯示一個微調器。線程完成後,將從視圖中刪除對話框,並將另一個活動壓入堆棧。問題是,對話框沒有被處理掉。當我回到Activity(彈出堆棧)並返回到前一個Activity時,會調用ProgressDialog的同一個實例(當被要求顯示對話框時)。Dispose of ProgressDialog

創建對話框:

protected Dialog onCreateDialog(int id) { 

progDialog = new ProgressDialog(this); 
progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
progDialog.setMessage("Searching for ..." + txtPart.getText().toString()); 
// Start thread    
progThread = new AcmXmlSearchHelper(handler, txtTitle.getText().toString(), txtPart.getText().toString(), txtSection.getText().toString(), this); 
progThread.start(); 
return progDialog; 

} 

顯示對話框:

showDialog(getProgressId()); 

關閉該對話框:

dismissDialog(getProgressId()); 

最簡單的解決方法是調用一個ProgressDialog(的ShowDialog())具有唯一的ID。但是,我不認爲這是很好的內存使用。我可以在內存中掛載一些對話框。我如何確保物體被丟棄?

THX

+1

你在哪裏調用'showDialog()'?在'onCreate()','onResume()'? – user802421

+0

@Phil:user802421的評論可能是相關的。引用你的問題......「當線程結束後,對話框將從視圖中移除......」 - 如果是這種情況,它真的被解散了,但是當你從第二個Activity返回時你會看到它,那麼它建議首先創建它的代碼被稱爲第二次。順便說一句,有沒有一個原因,你爲什麼使用'Thread'而不是'AsyncTask'?使用'AsyncTask'使用'onPreExecute'和'onPostExecute'方法可以非常容易地處理進度/提醒對話框。 – Squonk

+0

謝謝我將尋找AsyncTask。要回答@ user802421的問題,在onClick事件時調用showDialog()。 – PhillyNJ

回答

2

創建一個嵌套的AsyncTask類可能會明確的東西給你:

private static class MyTask extends AsyncTask<Void, Void, Void> { 

      protected void onPreExecute() { 
       // Show dialog here - note: showDialog is depricated. 
      } 

      protected Void doInBackground(Void... unused) { 
        // do the stuff that's in your thread here. 
        return null; 
      } 

      protected void onPostExecute(Void unused) { 
        // Dismiss dialog here - note: dismissDialog is depricated. 
      } 
} 
0

解決方案是使用removeDialog(id),而不是dismissDialog(id)