如果有 getArguments(),我们是否应该在片段中使用 savedInstanceState?
Should we use savedInstanceState in fragments if there are getArguments()?
在 Android 片段中,我们可以从 savedInstanceState
或 getArguments()
中获取 onCreate()
中的初始数据。我经常检查它们是否 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
是否会从那里获取数据。如果是 null
,我将检查 getArguments() != null
,如果是,将从那里获取数据。否则变量将为 null
、0
或 false
.
当我们留下一个片段并调用 onSaveInstanceState()
时,我们可以将数据写入一个包,稍后可以在 onCreate()
中读取它们。但我们也可以将数据写入 getArguments()
并从片段的任何位置读取它们。为什么我们应该使用 savedInstanceState
因为我们可以写入 getArguments()
?
设置和获取参数实际上对 savedInstanceState
没有任何作用,当您调用 Fragment
时,您可以为其设置 Bundle
并且当您处于 Fragment
您可以使用 getArgument
获取发送到 Fragment
的内容。 savedInstanceState
通常用于不想在配置更改时丢失数据的情况,例如设备旋转。
正如@SinaMN75所说,在创建分片时,可以检查是否在配置更改后恢复或首次初始化。屏幕旋转后可能会出现一些困难,例如,菜单项重复,Toolbar
标题更改。在这种情况下 onCreate()
我们应该检查 savedInstanceState != null
并从那里读取数据。 getArguments()
不会向我们提供有关配置更改的信息。
当然,我们应该覆盖onSaveInstanceState()
以保存需要的变量。
这两个选项的主要区别在于它们的存储 location.The 参数存储在内存中,但 saveInstanceState 序列化到磁盘。
你应该看看这个页面:
https://developer.android.com/topic/libraries/architecture/saving-states
在 Android 片段中,我们可以从 savedInstanceState
或 getArguments()
中获取 onCreate()
中的初始数据。我经常检查它们是否 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
是否会从那里获取数据。如果是 null
,我将检查 getArguments() != null
,如果是,将从那里获取数据。否则变量将为 null
、0
或 false
.
当我们留下一个片段并调用 onSaveInstanceState()
时,我们可以将数据写入一个包,稍后可以在 onCreate()
中读取它们。但我们也可以将数据写入 getArguments()
并从片段的任何位置读取它们。为什么我们应该使用 savedInstanceState
因为我们可以写入 getArguments()
?
设置和获取参数实际上对 savedInstanceState
没有任何作用,当您调用 Fragment
时,您可以为其设置 Bundle
并且当您处于 Fragment
您可以使用 getArgument
获取发送到 Fragment
的内容。 savedInstanceState
通常用于不想在配置更改时丢失数据的情况,例如设备旋转。
正如@SinaMN75所说,在创建分片时,可以检查是否在配置更改后恢复或首次初始化。屏幕旋转后可能会出现一些困难,例如,菜单项重复,Toolbar
标题更改。在这种情况下 onCreate()
我们应该检查 savedInstanceState != null
并从那里读取数据。 getArguments()
不会向我们提供有关配置更改的信息。
当然,我们应该覆盖onSaveInstanceState()
以保存需要的变量。
这两个选项的主要区别在于它们的存储 location.The 参数存储在内存中,但 saveInstanceState 序列化到磁盘。 你应该看看这个页面: https://developer.android.com/topic/libraries/architecture/saving-states