是否可以在Stack<Stack<View>>
中保存onSaveInstanceState
。
可能还有另外一种方法如何保存一些特定数据来管理Activity状态?
答案 0 :(得分:1)
您无法将视图保存到捆绑包。你无论如何都不应该这样做。如果重新创建活动,它将再次重新填充布局(如果配置已更改,甚至会扩充另一个布局)并创建新的视图层次结构。
您应该将业务数据与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");
}
}
答案 1 :(得分:0)
是否可以保存Stack&gt;在onSaveInstanceState。
不,因为Stack和View没有Parcelable / Serializable接口,这是将Object放入Bundle所必需的。 Bundle只接受Arrays / ArrayList,String,primitives等。
可能会以另一种方式保存一些特定数据来管理Activity 状态?
您要保存哪些数据?如果你想保存整个View / ViewGroup,你可能会走错路。
例如,表明TextView是可见的,将布尔值设置为true并将其放入Bundle中。检查onCreate()中的boolean并将View设置为visible。如果TextView也有一些文本,请将其保存为String并将文本设置为TextView,使其可见。