如何保存活动状态

时间:2011-12-29 12:20:22

标签: android

我是android.i新手,只有一个activitymain.xml文件。现在,我在scroll view文件中有一个main.xml。当我在portrait mode运行我的应用程序时,当我转到scroll view的底部,而当我更改我的application state到横向模式,而不是我转到滚动视图的顶部..这意味着当我们在portraitlandscape之间切换时,反之亦然,activity会被召回。所以需要在portrait中保存应用程序状态并在landscape中恢复。所以任何解决方案呢? 提前致谢 Aamirkhan我。

2 个答案:

答案 0 :(得分:3)

文档在explaining different ways to handle configuration changes中做得不错,包括屏幕方向更改。其中一种方法,有助于保存UI的临时状态,是在onSavedInstanceState()方法中保存数据 - 正如@Jason Kuang所提到的那样。

通常,您可以依靠Android来保存和恢复View的状态,而无需您做任何特别的努力。 protected方法onSaveInstanceState()的源代码解释了(强调添加):

  

默认实现通过在具有id的层次结构中的每个视图上调用android.view.View.onSaveInstanceState()并保存id,来为您处理大多数UI每个实例状态。当前关注的视图(所有这些都由onRestoreInstanceState(android.os.Bundle)的默认实现恢复)。如果您覆盖此方法以保存每个单独视图未捕获的其他信息,您可能希望调用默认实现,否则请准备好自己保存每个视图的所有状态。

这有点具有欺骗性,因为API文档指出EditTextTextView必须在布局XML文件中明确声明android:freezesText="true",以确保Android自动存储调用onSaveInstanceState()时的状态。我最近没有测试过这个,但它是源代码似乎正在做的事情。因此,最好自己处理临时UI状态。

另一个提示:您可以通过调用View上的setSaveEnabled(false)明确阻止View的临时数据存储。 (这不会影响其子女。)

通常,最好在onPause()方法和onSaveInstanceState()中手动保存屏幕状态。

答案 1 :(得分:2)

当您将应用程序状态从横向更改为纵向时,活动将被销毁并重新创建,如果要保存活动状态,可以参考 Saving Android Activity state using Save Instance State