为什么android创建Fragment推荐用newInstance

FullScreenDialogFragment使用newInstance方法不是因为它是一个单例,而是因为这是创建DialogFragment实例并同时提供参数的一种标准模式。这种模式通常称为静态工厂方法模式,在Android开发中被广泛使用,尤其是用于Fragment的实例化。

newInstance的原因和优点包括:

  1. 封装性:通过newInstance方法来封装设置Fragment参数的细节。这有助于将Fragment需要的参数和创建过程封装在一起,使外部代码不直接与Fragment中的Argument细节交互,降低了耦合。

  2. 参数化构造Fragment应该有一个空的构造函数,以便在配置更改和重建的时候系统能够重新实例化它们。而传统的带参数构造函数不适用于Fragment。使用newInstance方法和Bundle传参的模式是设置Fragment参数的官方推荐方式。

  3. 状态恢复:在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的单例,每次调用都会生成一个新的实例。通常情况下,每次需要显示对话框时,都创建对话框的新实例是最佳实践。

相关推荐

  1. 为什么android创建Fragment推荐newInstance

    2024-04-05 17:28:01       17 阅读
  2. Android】动态添加 Fragment

    2024-04-05 17:28:01       40 阅读
  3. Android Fragment 生命周期

    2024-04-05 17:28:01       38 阅读
  4. Android基础-Fragment详解

    2024-04-05 17:28:01       9 阅读
  5. MySQL|为什么推荐外键?

    2024-04-05 17:28:01       19 阅读
  6. 为什么Qt开发Android应用?

    2024-04-05 17:28:01       33 阅读
  7. Android 基于Fragment的权限封装

    2024-04-05 17:28:01       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-05 17:28:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-05 17:28:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-05 17:28:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-05 17:28:01       20 阅读

热门阅读

  1. 03-Docker入门

    2024-04-05 17:28:01       15 阅读
  2. linux内核常用调优参数

    2024-04-05 17:28:01       14 阅读
  3. Android U user+root实现方案

    2024-04-05 17:28:01       15 阅读
  4. FTP协议

    FTP协议

    2024-04-05 17:28:01      10 阅读
  5. vue3监听div高宽变化自定义分析

    2024-04-05 17:28:01       10 阅读
  6. Postman 请求参数传递指南:Query、Path 和 Body 详解

    2024-04-05 17:28:01       12 阅读
  7. 输出杨辉三角形

    2024-04-05 17:28:01       15 阅读
  8. Oracle备份和还原的几种方式

    2024-04-05 17:28:01       13 阅读