android - 如果有 getArguments(),我们是否应该在 fragment 中使用 savedInstanceState?

标签 android android-fragments onsaveinstancestate

在 Android fragment 中,我们可以在 onCreate() 中从 savedInstanceStategetArguments() 获取初始数据。我经常检查它们是否为 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,如果是,将从那里获取数据。否则变量将为 null0false

当我们留下一个 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/

相关文章:

android - 在 Android 手机上模拟 NFC 标签

android - 使用 Android 4.X 编译但支持 API Level 9

java - android studio中的应用程序源代码给了我很多错误

android - 如何在 onSaveInstanceState 上存储 recyclerview 数据

android - 如何在 fragment 中保存和恢复recyclerview的位置

安卓 : AndEngine pixel perfect collision GLES2?

android - GridView 的平滑滚动

android - 关闭 fragment 时更新 Activity

java - 如何保存字符串?

android - 保存 RecyclerView 列表状态