2013-05-01 49 views
0

如何保存所有字段的状态,我在我的类中扩展了View?在View类中保存所有字段的状态 - Android

@Override 
protected Parcelable onSaveInstanceState() { 
    Parcelable localState = super.onSaveInstanceState(); 

    Bundle bundle = new Bundle(); 
    bundle.putSerializable("gameEngine", this.gameEngine); 
    bundle.putParcelable("inherited", localState); 
    return bundle; 
} 

@Override 
protected void onRestoreInstanceState(Parcelable localState) { 
    Bundle bundle = (Bundle) localState; 
    this.gameEngine = ((GameEngine) bundle.getSerializable("gameEngine")); 
    super.onRestoreInstanceState(bundle.getParcelable("inherited")); 
} 

这似乎并不拯救领域。

谢谢。

回答

0

将所有值放入数组中并手动恢复它们。
或将它们存储在自定义类中。

或者如果你只有几个值把它们放在一个软件包中一个:

bundle.putString("1", value); 
bundle.putString("2", value); 
etc. 
+0

这个答案是正确的,但是对于需要存储大量变量的人来说,这可能不是最好的解决方案。 另外我发现你不能把一个多维数组放在包中。我不得不创建一个算法来将多重拼合成一个单独的用于存储,然后将另一个重新组合成多个用于恢复。 谢谢:) – Waddas 2013-05-02 00:25:43

+0

据我所知,这是做到这一点的唯一方法。 您可以将putSerializable用于多维数组。请注意,通过Bundle的所有内容都被序列化(克隆),因此所有对其他活动的引用都将丢失。您可以使用静态变量来保留它们。 对于最近的答案抱歉,我来自欧洲。 – PhpXp 2013-05-02 07:48:16

0

它可能不是在单个视图对象内完成此操作的最佳解决方案。从片段或包含视图的活动中保存视图的状态会更容易。片段和活动都提供了遵循示例代码中使用的模式来保留状态实例的方法。

+0

我怎么会做这种从活动中? – Waddas 2013-05-01 18:46:41

+0

使用onCreate和onSaveInstanceState。他们在你的例子中以你想要的方式使用一个包。 – Snicolas 2013-05-01 19:41:19

+0

看看这个主题:http://stackoverflow.com/a/151940/693752 – Snicolas 2013-05-01 19:45:48