【发布时间】:2015-03-20 17:16:00
【问题描述】:
假设我有一个活动,其中我有一个片段(并且只有一个片段)。
我想在旋转的情况下保留片段的状态。我有两个选择:
选项 A) 保留 Activity 的状态。
选项 B) 保留 Fragment 的状态。
到底有什么区别?保留 Activity 状态将完成这项工作,保留 Fragment 也是如此。
谢谢
【问题讨论】:
标签: android android-fragments android-activity
假设我有一个活动,其中我有一个片段(并且只有一个片段)。
我想在旋转的情况下保留片段的状态。我有两个选择:
选项 A) 保留 Activity 的状态。
选项 B) 保留 Fragment 的状态。
到底有什么区别?保留 Activity 状态将完成这项工作,保留 Fragment 也是如此。
谢谢
【问题讨论】:
标签: android android-fragments android-activity
您应该将状态保存在它所属的位置。这将允许您在未来更轻松地修改您的应用,因为它减少了组件之间的依赖关系。
假设,您的ListFragment 中有currentPosition。您可以将其保存在封闭的活动中,但您的Ativity 将知道您的Fragment 的内部状态,这可能不是必需的。有一天,您不再需要 currentPosition 了,如果只保存在 Fragment 中,您的其他组件可以保持原样。向状态添加内容也是如此。
一般来说,我会为每个有状态组件定义一个static 内部State 类,可能是extending Parcelable,并在其中保存您需要的任何内部字段。 State 类必须是 static
【讨论】:
这取决于你。 如果您的活动中没有任何具体内容,您可以在片段中进行。
另一种选择是在您的AndroidManifest.xml 文件中为您的活动添加android:configChanges="orientation|screenSize",然后当您可以执行您需要在轮换中执行的操作时,任何轮换更改都会在您的活动中触发android.app.Activity#onConfigurationChanged。
在后一种情况下,框架不会重新创建您的活动和片段,因此不会更改布局(不会调用 onCreate)。小心点。
【讨论】: