2012-10-24 47 views
5

我有一個活動並需要在其中顯示對話框。一切工作正常。我overrided onCreateDialog方法活動,這裏是代碼:活動重新創建後再次顯示Android對話框

哪裏CreateWaitDialog是創建一個對話框的自定義方法和waitDialog是靜態變量。

我顯示的對話框通過調用的ShowDialog(10)

所有的代碼執行罰款。

在顯示對話框後,我通過調用關閉它。

if(waitDialog != null) 
    waitDialog.hide(); 

而且我在活動被破壞時被解僱。

if(dialogCreated) 
     dismissDialog(10); 
    super.onDestroy(); 

它關閉,一切都很好。 但是,當我改變我的設備的方向和活動重新創建它自己彈出!我不打電話給任何showDialog或類似的東西,它只是彈出!

回答

8

我認爲這是確定的活動和onCreateDialog的行爲:

回調藉助活動爲您創造被管理(保存和恢復)對話框。爲了兼容性,默認實現調用onCreateDialog(int)。如果您的目標是HONEYCOMB或更高版本,請考慮改爲使用DialogFragment。

如果您使用showDialog(int),活動將首次調用此方法,並在此後掛起。任何由此方法創建的對話框都會自動保存併爲您恢復,包括是否顯示。

如果您希望爲您管理保存和恢復對話框的活動,則應該重寫此方法並處理傳遞給showDialog(int)的任何ID。

我會猜測,onDestroy在活動生命週期中已經太晚了,無法關閉對話框。我的猜測是活動將你的對話框保存在onSaveInstanceState中。

我可能會嘗試在調用super.onSaveInstanceState之前關閉onSaveInstanceState中的對話框,然後在android嘗試保存並恢復之前,該對話框將被取消。

@Override 
onSaveInstanceState(Bundle outstate) { 

    dismissDialog(10); 
    super.onSaveInstanceState(outstate); 
} 
+1

我討厭相互競爭的答案,因爲你花了額外的時間來引用文檔,我刪除了我的答案,並給你一個upvote。 – Sam

+0

@Sam我認爲你的答案仍然有價值,我會離開它。他可能真的應該被稱爲解僱而不是隱藏,我的答案只是一個猜測/ hack來繞過onCreateDialog的默認行爲。我認爲你可能是更好的解決方案。 – Tim

+0

我只是仔細檢查了源代碼,如果對話框重複顯示,使用'hide()'是一個更快的方法。你的答案也許是猜測,但它是有根據的和正確的。所以我很高興離開我的讚揚。 – Sam

1

如果您想阻止應用程序繼續保存並恢復對話框,請調用Activity.removeDialog(int id)。

4

我發現自己遇到了類似的問題,因爲我在不調用super.onDismiss()的情況下覆蓋onDismiss()。如果您發現自己的對話在活動重新創建時重新出現,您可能需要驗證您是否犯了同樣的錯誤。

相關問題