【发布时间】:2016-04-21 09:25:46
【问题描述】:
我想在屏幕旋转过程中保留一个复杂的java对象,所以我把对象做成Parcelable并实现了必要的方法:
- 在 writeToParcel(Parcel dest, int flags) 方法中,我将一些值保存到“dest”。
- 在 Parcelable.Creator 的 createFromParcel(Parcel source) 方法中,我以正确的顺序从“源”中获取值并返回相应的对象。
然后在 Fragment 的 onSaveInstanceState 中我保存了 Parcelable :
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("myObject", myObject);
}
并在 Fragment 的 onCreate 中获取我的对象:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyObject myObject = savedInstanceState.getParcelable("myObject");
}
效果很好。
然后我做了以下测试:
- 在 writeToParcel 方法中删除了我所有的代码。
- 在 createFramParcel 方法中返回 null。
当我运行应用程序时,我得到了完全相同的结果!我得到了一个包含所有适当值的对象。
为什么会这样? Parcelable 是否“自动”创建 Parcelable 对象?
【问题讨论】:
-
我很确定,
onSaveInstanceState()中的调用顺序是错误的(保存后您正在修改捆绑包)。
标签: java android fragment parcelable screen-rotation