【发布时间】:2014-04-26 22:19:07
【问题描述】:
我正在将对象保存在 onsaveInstance() 中,但是在片段旋转之后,我在 oncreate() 中获取了保存的对象,第二次调用方法 oncreate(Bundle onsaveInstance) 并且那次 onsaveInstance 变为 null。如何解决问题或防止 oncreate() 方法的调用发生两次?
【问题讨论】:
我正在将对象保存在 onsaveInstance() 中,但是在片段旋转之后,我在 oncreate() 中获取了保存的对象,第二次调用方法 oncreate(Bundle onsaveInstance) 并且那次 onsaveInstance 变为 null。如何解决问题或防止 oncreate() 方法的调用发生两次?
【问题讨论】:
也许在片段的 onCreate() 回调方法中使用 setRetainInstance(true) 会有所帮助:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
如果设置为“true”,当方向改变时,片段实例不会被破坏(只有它的视图层次结构被破坏),它会从 onDestroyView() 传递到 onDetach()(跳过 onDestroy()),当 Activity 被完成的。并且当方向更改完成并创建新的 Activity 时,会调用 onAttach(),跳过 onCreate(),并调用 onCreateView()。这样,Fragment 就会保持其状态。
为了更好地理解保存和检索片段状态的不同方法,我建议你阅读这个 --> saving-and-retrieving-android-instance-state-part-2/ 第 1 部分是关于活动的,第 2 部分是关于片段的。
【讨论】: