在方向更改上保存活动状态(不仅仅是一些变量)

时间:2011-12-17 04:21:55

标签: android android-activity savestate

我意识到在SO上已经有很多关于这个话题的问题了。 但是,当谈到保存活动状态时,我甚至不知道基本知识。

  

(请参阅下面的截图)当应用启动时,

1)ScrollView项目1,2,3,4可见

2)表包含由于Gainer按钮填充的数据。

  

如下面的屏幕截图所示,应用程序在PORTRAIT模式下运行,我

1)向下滚动到ScrollView项目4,5,6

2)按下失败者按钮,因此按钮下方表格中的数据会发生变化。

3)我甚至会动态更改图表内容(我还没有完成)。

  

现在我切换到LANDSCAPE模式,所以

1)ScrollView显示ScrollView项目1,2,3,4

2)表显示由于按下Gainer按钮而填充的数据。

3)图表就像我没有改变它一样(我稍后会更改)。

  

所以当我改变方向时,我的活动会重新启动。因此,如果用户在一个方向上执行某项任务并且他更改了方向,那么整个进度将会丢失。

我知道我需要保存活动的状态并在方向改变时恢复它。 但我不知道从哪里开始以及要保存什么。

任何帮助都将有益于生命!

Scrrenshot

1 个答案:

答案 0 :(得分:12)

选项#1:覆盖onSaveInstanceState()的{​​{1}},并在提供的Activity中输入您想要的任何信息。您的新活动实例将在Bundle(或Bundle)中收到onRestoreInstanceState()Here is a sample project demonstrating this

选项#2:覆盖onCreate()的{​​{1}}并返回代表您所在州的某个对象。您的新活动实例可以调用onRetainNonConfigurationInstance()来检索该对象,因此新活动可以应用该信息。但是要小心,不要让旧活动在对象中返回一些内容,该对象将引用保存回旧活动(例如,小部件,常规内部类的实例)。 Here is a sample project demonstrating this

选项#3:将此活动转换为片段。在初始设置期间,片段会自行调用Activity。通过getLastNonConfigurationInstance()动态地将片段添加到某些活动中。现在,当配置更改时,片段将保留,因此将保留所有窗口小部件和状态。 Here is an overly-complex sample application demonstrating this

这是目前推荐的三种方法。