赞
踩
FullScreenDialogFragment
使用newInstance
方法不是因为它是一个单例,而是因为这是创建DialogFragment
实例并同时提供参数的一种标准模式。这种模式通常称为静态工厂方法模式,在Android开发中被广泛使用,尤其是用于Fragment
的实例化。
newInstance
的原因和优点包括:
封装性:通过newInstance
方法来封装设置Fragment
参数的细节。这有助于将Fragment
需要的参数和创建过程封装在一起,使外部代码不直接与Fragment
中的Argument细节交互,降低了耦合。
参数化构造:Fragment
应该有一个空的构造函数,以便在配置更改和重建的时候系统能够重新实例化它们。而传统的带参数构造函数不适用于Fragment
。使用newInstance
方法和Bundle
传参的模式是设置Fragment
参数的官方推荐方式。
状态恢复:在Android系统需要重新创建Fragment
(例如,在内存不足时杀死进程后恢复、设备旋转或其他配置更改)时,提供的Bundle
参数将由系统保存和恢复。这意味着使用过这种模式创建的Fragment
能在这些场景下正确恢复其状态。
下面是一个简单的FullScreenDialogFragment
使用newInstance
模式的示例:
class FullScreenDialogFragment : DialogFragment() { // 其他代码... companion object { private const val ARG_TITLE = "title" // `newInstance`方法,用于创建`FullScreenDialogFragment`并设置标题 fun newInstance(title: String): FullScreenDialogFragment { val args = Bundle().apply { putString(ARG_TITLE, title) } // 创建`DialogFragment`的新实例并设置参数 return FullScreenDialogFragment().apply { arguments = args } } } }
使用这种模式的例子:
val title = "My Dialog Title"
val dialogFragment = FullScreenDialogFragment.newInstance(title)
// 这里可以展示dialogFragment
newInstance
方法不创建Fragment
的单例,每次调用都会生成一个新的实例。通常情况下,每次需要显示对话框时,都创建对话框的新实例是最佳实践。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。