在 Android fragment 中,我们可以在 onCreate()
中从 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
,如果是,将从那里获取数据。如果它是 null
,我将检查 getArguments() != null
,如果是,将从那里获取数据。否则变量将为 null
、0
或 false
。
当我们留下一个 fragment 并调用 onSaveInstanceState()
时,我们可以将数据写入 bundle,稍后可以在 onCreate()
中读取它们。但我们也可以将数据写入 getArguments()
并从 fragment 的任何位置读取它们。为什么我们应该使用 savedInstanceState
因为我们可以写入 getArguments()
?
最佳答案
这两个选项的主要区别在于它们的存储位置。参数存储在内存中,但 saveInstanceState 序列化到磁盘。 你应该看看这个页面: https://developer.android.com/topic/libraries/architecture/saving-states
关于android - 如果有 getArguments(),我们是否应该在 fragment 中使用 savedInstanceState?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52272366/