安卓开发 - 在Fragment中使用Setter方法和传递Bundle参数的区别

6
在我的代码中,我使用两种方法将数据传递给新的片段。一种是通过Bundle传递数据,另一种是有时编写setter来传递数据。
这两种方法都能正常运行,目前没有遇到任何问题。
但现在,我正在优化我的代码,考虑到savedInstances、方向更改或任何其他可能导致数据丢失的情况。
因此,我心中确切的疑问是,通过bundle发送的数据是否默认保持完整,即在方向更改/从后台恢复的片段上。或者我们也必须在bundle的情况下使用savedInstance。据我所知,通过setter设置的数据会丢失。

2个回答

5
每当操作系统需要重新布局你的视图时,它都会使用保存的实例状态调用onCreateonCreateView方法。如果你使用构造函数并传递变量,则会丢失任何你设置的内容。如果你使用Bundle并直接更改其中一些变量,则很可能会用Bundle中的原始值覆盖它们。要解决这个问题,只需在执行突变之前检查Bundle是否为空。

简而言之,传入的Bundle将通过方向更改和实例恢复保持不变。你可以在onSaveInstanceState方法中向保存的实例状态Bundle添加额外的数据。


1

正如你所说,操作系统可以重新创建你的片段(跨配置更改或当操作系统需要回收内存时),数据将会丢失。你需要考虑使用saveInstanceState和将Bundle作为片段参数之间的选择。

  • 将Bundle作为片段参数使用较少复杂,易于维护。然而,参数必须在片段附加到活动之前设置,这意味着您无法稍后更改参数。因此,如果您传递的数据是固定的,则argument bundle是最佳选择。

  • 如果您传递的数据在运行时可能会更改,则setter + saveInstanceState是唯一可行的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接