4

我意识到在 SO 上已经提出了很多关于这个主题的问题。但是我什至不知道保存活动状态的基本知识。


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

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

2) 表格包含由于获得者按钮而填充的数据。


如下图所示,当应用程序在 PORTRAIT 模式下运行时,我

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

2)按下失败者按钮,因此按钮下方表格中的数据会相应更改。

3)我什至会动态更改图形的内容(我还没有这样做)。


现在我切换到风景模式所以

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

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

3)图表是因为我还没有改变它(我稍后会改变)。


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

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

任何帮助都会挽救生命!

截图

4

1 回答 1

12

选项#1:覆盖onSaveInstanceState()您的Activity并将您想要的任何信息放入提供的Bundle. 您的新活动实例将BundleonRestoreInstanceState()(或onCreate())中收到它。这是一个演示这个的示例项目

选项#2:覆盖onRetainNonConfigurationInstance()你的Activity并返回一些代表你的状态的对象。您的新活动实例可以调用getLastNonConfigurationInstance()以检索该对象,因此新活动可以应用该信息。但是要小心,不要让旧的活动返回对象中的某些东西,该对象持有对旧活动的引用(例如,小部件,常规内部类的实例)。这是一个演示这个的示例项目

选项#3:将此活动转换为片段。在初始设置期间让片段setRetainInstance(true);自行调用。通过FragmentTransaction. 现在,当配置更改时,片段被保留,因此您的所有小部件和状态都被保留。这是一个过于复杂的示例应用程序来演示这个.

这些是当今推荐的三种方法。

于 2011-12-17T13:24:32.300 回答