5

在官方示例http://developer.android.com/reference/android/app/DialogFragment.html#BasicDialog中,使用靜態工廠方法創建了片段,該工廠方法將參數包裝在一個Bundle中,並調用no-args構造函數將setArguments(bundle)傳遞給args - 所以我的問題是 - 爲什麼不簡單地使用public構造函數這些論據?什麼是使用getArguments/setArguments片段的方法的原因 - 也許是不保證每次重新創建對話框,但重用?如果是這樣,那麼當它發生? 在此先感謝。DailogFragment - getArguments/setArguments - 爲什麼要在一個bundle中傳遞參數?

回答

7

實施無參數默認構造函數模式允許系統在必要時動態地重新創建片段。從文檔:

Fragment的所有子類都必須包含一個公共的空構造函數。框架通常會在需要時重新實例化一個片段類,特別是在狀態恢復期間,並且需要能夠找到這個構造器來實例化它。如果空的構造函數不可用,則在狀態恢復期間會發生運行時異常。

「會經常」和「在某些情況下」使它變得模糊。但不足以滿足你的好奇心......這是它的理由!

+1

一個空的公共構造函數可以與一個參數化的公共構造函數共存。這並不解釋使用靜態方法(而不是構造函數),也不包含參數到「Bundle」對象中。 – 2014-03-16 22:02:30

+0

@KonradMorawski你說得對,這聽起來很合理。但是ADT lint工具會突出顯示這樣的構造函數有問題。 – 2014-09-12 00:03:34

相關問題