2010-07-03 68 views
37

據我所知,有兩種方法可以顯示來自Activity的對話框。Dialog.show()與Activity.showDialog()

  1. 創建對話框(例如,使用AlertDialog.Builder),然後調用新創建的對話的方法show()
  2. 調用Activity的showDialog()方法,傳遞一個int值來唯一定義要構建的對話框類型。然後覆蓋onCreateDialog()實際構建對話框,Android會爲您顯示它。

第二種方法似乎是標準做法,但我很好奇,如果有任何理由,我很重要。這裏的一切,我可以想出:

理由使用Dialog.show

  1. 如果需要參數對話框以某種方式,它可以是一個有點尷尬使用Activity.showDialog,如this question描述。您可能必須在成員變量中存儲字符串或其他內容,以便在onCreateDialogonPrepareDialog期間可以稍後檢索它。
  2. 用於創建和修改對話框的邏輯在多個地方展開,有可能使得代碼難以閱讀和維護:
    • ,你叫showDialog()
    • 裏面一個潛在的大switch語句中的位置在重寫onCreateDialog方法
    • 裏面一個潛在的大switch聲明重寫的onPrepareDialog方法

理由使用Activity.showDialog

  1. 的API文檔Activity.showDialog說,對話是「管理」,其中我想提供一些好處的活動?但是,如果您使用AlertDialog.Builder,我認爲這也是如此,因爲您將this作爲參數傳遞給Builder的構造函數。
  2. 如果您的活動將多次顯示相同(或非常相似)的對話框,則此選項只會創建一次,而不是每次都創建一個新對話框,因此就分配空間而言,對系統的壓力較小對於新對象,垃圾收集等

所以我的問題是,什麼是決定何時使用Activity.showDialog以及何時使用Dialog.show,爲什麼標準是什麼?

回答

18

在我看來,你應該更喜歡showDialog,因爲這種方法會做大部分的工作適合你。在示例中,您不必擔心在更改屏幕方向後您將失去對對話框的引用。它會自動重新創建。 Dialog.show更容易出錯。

所以我建議你在任何地方都可以使用showDialog

+1

有一個關於爲什麼我們選擇Activity.showDialog而不是Dialog.show的詳細技術說明。 http://www.dreamincode.net/forums/topic/233010-dialogs-and-the-android-lifecycle/是的。主要涉及屏幕方向。 – 2012-03-16 01:34:45

+1

這裏只需要注意一點:'onCreateDialog()'只在需要創建對話框時調用一次,這是您最初設置對話框內容的地方。如果你需要更新它的內容,你應該使用'onPrepareDialog()'方法,這個方法在每次顯示對話框之前被調用,以便你適時地更新它的內容。 – Caumons 2012-03-23 14:59:35

2

我認爲這個決定取決於你,這取決於你指出的很好的理由。如果我有一個只有一個對話框的活動(比如說用於顯示提醒),那麼我只需要觸發Dialog.show方法......另一方面,如果我的應用程序的UI依賴於它的太多功能來使用對話框會更好地使用showDialog()。我想用showDialog()的最大優點是,它更容易閱讀:

final int ERROR_DIALOG = 404; 
final int MSG_DIALOG = 200; 

..... 

// if someone else read this, he/she will immediately understand what's going on 
showDialog(ERROR_DIALOG); 
相關問題