代码之家  ›  专栏  ›  技术社区  ›  CoolMind

如果有getArguments(),是否应该在片段中使用savedinstanceState?

  •  0
  • CoolMind  · 技术社区  · 6 年前

    在Android片段中,我们可以在 onCreateView() savedInstanceState getArguments() . 我经常检查它们 null 然后分配变量。例如,在Kotlin:

    val bundle = savedInstanceState ?: arguments
    bundle?.let {
        startDate = Date(it.getLong(ARG_START_DATE, 0))
        endDate = Date(it.getLong(ARG_END_DATE, startDate.time))
    }
    

    所以,首先我检查 savedInstanceState != null 如果是这样,将从那里获得数据。如果是空的,我检查一下 getArguments() != null 如果是这样,就可以从那里得到数据。否则变量将为空、0或假。

    当我们留下一个片段并调用 onSaveInstanceState() 我们可以将数据写入到一个包中,稍后可以读取它们 OnCeCaleVIEW() . 但我们也可以将数据写入 GETARGUMUN() 从碎片的任何地方读出来。我们为什么要用 倚仗 我们可以写信给 GETARGUMUN() ?

    3 回复  |  直到 6 年前
        1
  •  1
  •   No Body    6 年前

    这两个选项的主要区别在于它们的存储位置。参数存储在内存中,但saveInstanceState被序列化到磁盘。 你应该看看这个页面: https://developer.android.com/topic/libraries/architecture/saving-states

        2
  •  1
  •   SinaMN75    6 年前

    设置和争论真的没有任何作用 savedInstanceState ,当您呼叫 Fragment 你可以设置一个 Bundle 当你在 破片 你可以得到你发送给 破片 使用 getArgument . 倚仗 通常在您不想在配置更改(如设备旋转)时释放数据时使用。

        3
  •  0
  •   CoolMind    6 年前

    AS @ SnAMN75 也就是说,当创建一个片段时,它可以检查它是在配置更改后恢复,还是第一次初始化。屏幕旋转后可能会出现一些困难,例如菜单项重复、工具栏标题更改。在这种情况下 onCreateView() 我们应该检查一下 savedInstanceState != null 从那里读取数据。 getArguments() 不会提供有关配置更改的信息。

    当然,我们应该超越 onSaveInstanceState() 以便保存所需的变量。