301的網(wǎng)站用什么來(lái)做論壇推廣網(wǎng)站
FullScreenDialogFragment
使用newInstance
方法不是因?yàn)樗且粋€(gè)單例,而是因?yàn)檫@是創(chuàng)建DialogFragment
實(shí)例并同時(shí)提供參數(shù)的一種標(biāo)準(zhǔn)模式。這種模式通常稱為靜態(tài)工廠方法模式,在Android開(kāi)發(fā)中被廣泛使用,尤其是用于Fragment
的實(shí)例化。
newInstance
的原因和優(yōu)點(diǎn)包括:
-
封裝性:通過(guò)
newInstance
方法來(lái)封裝設(shè)置Fragment
參數(shù)的細(xì)節(jié)。這有助于將Fragment
需要的參數(shù)和創(chuàng)建過(guò)程封裝在一起,使外部代碼不直接與Fragment
中的Argument細(xì)節(jié)交互,降低了耦合。 -
參數(shù)化構(gòu)造:
Fragment
應(yīng)該有一個(gè)空的構(gòu)造函數(shù),以便在配置更改和重建的時(shí)候系統(tǒng)能夠重新實(shí)例化它們。而傳統(tǒng)的帶參數(shù)構(gòu)造函數(shù)不適用于Fragment
。使用newInstance
方法和Bundle
傳參的模式是設(shè)置Fragment
參數(shù)的官方推薦方式。 -
狀態(tài)恢復(fù):在Android系統(tǒng)需要重新創(chuàng)建
Fragment
(例如,在內(nèi)存不足時(shí)殺死進(jìn)程后恢復(fù)、設(shè)備旋轉(zhuǎn)或其他配置更改)時(shí),提供的Bundle
參數(shù)將由系統(tǒng)保存和恢復(fù)。這意味著使用過(guò)這種模式創(chuàng)建的Fragment
能在這些場(chǎng)景下正確恢復(fù)其狀態(tài)。
下面是一個(gè)簡(jiǎn)單的FullScreenDialogFragment
使用newInstance
模式的示例:
class FullScreenDialogFragment : DialogFragment() {// 其他代碼...companion object {private const val ARG_TITLE = "title"// `newInstance`方法,用于創(chuàng)建`FullScreenDialogFragment`并設(shè)置標(biāo)題fun newInstance(title: String): FullScreenDialogFragment {val args = Bundle().apply {putString(ARG_TITLE, title)}// 創(chuàng)建`DialogFragment`的新實(shí)例并設(shè)置參數(shù)return FullScreenDialogFragment().apply {arguments = args}}}
}
使用這種模式的例子:
val title = "My Dialog Title"
val dialogFragment = FullScreenDialogFragment.newInstance(title)
// 這里可以展示dialogFragment
newInstance
方法不創(chuàng)建Fragment
的單例,每次調(diào)用都會(huì)生成一個(gè)新的實(shí)例。通常情況下,每次需要顯示對(duì)話框時(shí),都創(chuàng)建對(duì)話框的新實(shí)例是最佳實(shí)踐。