是否可以保存Stack<Stack<View>>
在onSaveInstanceState
.
可能有另一种方式如何保存一些特定的数据来管理活动状态?
您无法将视图保存到捆绑包中。而且你无论如何都不应该这样做。如果重新创建活动,它将再次重新膨胀布局(如果配置已更改,甚至会膨胀另一个)并创建新的视图层次结构。
您应该将业务数据与 UI 分开并将其存储在 SaveInstanceState 上。在活动重新创建之后,您应该获取该数据并相应地更新新的视图层次结构。
例如,如果您有一个 TextView,它显示一些存储在字段 mSuperText 中的文本,并且您的活动正在下降,您应该将其保存到 onSaveInstanceState 中的包中:
@Override
protected void onSaveInstanceState(final Bundle outState) {
outState.putString("supertext", mSuperText);
}
当你的活动被重新创建时,在你的方法 onCreate 中你会得到一个参数 onCreate(final Bundle savedInstanceState) 这将是你之前存储的包。因此,您可以获得所需的值:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mSuperText = savedInstanceState.getString("superText");
}
}
是否可以在 onSaveInstanceState 中保存 Stack>。
不,因为 Stack 和 View 没有 Parcelable / Serializable 接口,这是将对象放入 Bundle 所必需的。Bundle 只接受 Arrays/ArrayList、String、原语等。
可能有另一种方式如何保存一些特定的数据来管理活动状态?
您要保存哪些数据?如果你想保存整个视图/视图组,你可能走错路了。
例如,指示 TextView 可见,将布尔值设置为 true 并将其放入 Bundle 中。检查 onCreate() 中的布尔值并将视图设置为可见。如果 TextView 也有一些文本,请将其另存为 String 并将文本设置为 TextView,使之可见。