是否可以保存Stack <stack <view>&gt;在onSaveInstanceState </stack <view>中

时间:2013-09-18 08:31:47

标签: java android

是否可以在Stack<Stack<View>>中保存onSaveInstanceState

可能还有另外一种方法如何保存一些特定数据来管理Activity状态?

2 个答案:

答案 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,使其可见。