0

是否可以保存Stack<Stack<View>>onSaveInstanceState.

可能有另一种方式如何保存一些特定的数据来管理活动状态?

4

2 回答 2

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");
    }
}
于 2013-09-18T08:58:56.390 回答
0

是否可以在 onSaveInstanceState 中保存 Stack>。

不,因为 Stack 和 View 没有 Parcelable / Serializable 接口,这是将对象放入 Bundle 所必需的。Bundle 只接受 Arrays/ArrayList、String、原语等。

可能有另一种方式如何保存一些特定的数据来管理活动状态?

您要保存哪些数据?如果你想保存整个视图/视图组,你可能走错路了。

例如,指示 TextView 可见,将布尔值设置为 true 并将其放入 Bundle 中。检查 onCreate() 中的布尔值并将视图设置为可见。如果 TextView 也有一些文本,请将其另存为 String 并将文本设置为 TextView,使之可见。

于 2013-09-18T08:58:34.893 回答