我意识到在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)图表就像我没有改变它一样(我稍后会更改)。
所以当我改变方向时,我的活动会重新启动。因此,如果用户在一个方向上执行某项任务并且他更改了方向,那么整个进度将会丢失。
我知道我需要保存活动的状态并在方向改变时恢复它。 但我不知道从哪里开始以及要保存什么。
任何帮助都将有益于生命!
答案 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
这是目前推荐的三种方法。