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

2023-12-30

我意识到关于这个话题已经有很多问题了。 但我连基本的知识都不懂保存活动的状态.


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

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

2) 表包含通过增益按钮填充的数据。


如下图所示,当应用程序在肖像模式下运行时, I

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

2)按下“失败者”按钮,按钮下方表格中的数据会相应改变。

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


现在我切换到横向模式 so

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

2) 表显示因按下增益按钮而填充的数据。

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


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

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

任何帮助都将挽救生命!


选项#1:覆盖onSaveInstanceState()你的Activity并将您想要的任何信息放入所提供的Bundle。您的新活动实例将收到该信息Bundle in onRestoreInstanceState() (or onCreate()). 这是一个演示这一点的示例项目 https://github.com/commonsguy/cw-android/tree/master/Rotation/RotationOne.

选项#2:覆盖onRetainNonConfigurationInstance()你的Activity并返回一些代表你的状态的对象。您的新活动实例可以调用getLastNonConfigurationInstance()检索该对象,以便新活动可以应用该信息。但要小心,不要让旧活动返回对象中的某些内容,该对象保留对旧活动的引用(例如,小部件、常规内部类的实例)。这是一个演示这一点的示例项目 https://github.com/commonsguy/cw-android/tree/master/Rotation/RotationTwo.

选项#3:将此活动转换为片段。让片段调用setRetainInstance(true);在其初始设置期间自身。通过以下方式将片段动态添加到某些活动中FragmentTransaction。现在,当配置更改时,片段将被保留,因此所有小部件和状态都会被保留。这是一个过于复杂的示例应用程序,展示了这一点 https://github.com/commonsguy/cw-advandroid/tree/master/Honeycomb/WeatherFragment.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在方向改变时保存活动状态(不仅仅是一些变量) 的相关文章

随机推荐