2010-09-02 112 views
0

我有一個很奇怪的問題,我無法到目前爲止調試...... 事情是...我的應用程序需要下載一些工作。所以在onCreate()方法的開始,我檢查是否已經下載了一些東西。如果沒有,我彈出一個對話框要求用戶下載它。顯示對話框另一個對話框後:掛起

if (!isInstalled) { 
      showDialog(DIALOG_INSTALL); 
     } else { 
      start(); 
     } 

其中start()方法執行一些其他操作。現在,showDialog稱之爲:

builder = new AlertDialog.Builder(MyApp.this); 
     builder.setMessage("Would you like to install...") 
     .setCancelable(false) 
     .setPositiveButton("Install", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.dismiss(); 
       aManager.install(MyApp.this); 
      } 
     }); 
     dialog = builder.create(); 
     return dialog; 

我的對話框顯示,我點擊了,所以aManager.install()被調用。我傳遞的情況下,因爲aManager.install()彈出一個ProgressDialog顯示下載進度,併產生一個新的線程中,一切都被下載。所以顯然在創建我的對話框之前,我讓一個Handler接收來自該aManager.install()的響應。響應可能會有所不同,因爲例如互聯網連接不可用(Exception引發並捕獲,而偵聽器使用不同的代碼調用)。 (例外)我想調用另一個對話框,指出「出錯了,你想重試嗎?」...所以再次調用showDialog(DIALOG_REINSTALL)(這次是另一個代碼) 。 事情是... ShowDialog的()被調用(我可以通過登錄驗證這一點),但該對話框不會顯示出來。相反,我的應用程序只是懸掛!?!?!?

是否有人有線索,爲什麼它這樣做????也不例外提出,從logcat中絕對沒有,我不能說出它的掛...只是看到該方法被調用,並應顯示在對話框...

非常感謝您!

回答

1

看起來你有一個僵局。我會將下載代碼放在單獨的線程上,例如使用AsyncTask。在task.onPreExecute()你可以辭退1對話框,彈出你通過覆蓋task.onProgressUpdate()

0

使用.show()而不是.create()更新進度對話框。