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

4
我意识到在SO上已经有很多关于这个主题的问题了。但是当涉及到保存活动状态时,我甚至不知道基础知识。
(参见下图)当应用程序启动时,
1)ScrollView中的项目1,2,3,4可见
2)由于按下Gainer按钮而填充数据的表。
当应用程序以横向模式运行时,如下截图所示,我
1)向下滚动到ScrollView项目4,5,6
2)按下Loser按钮,因此按钮下面的表格中的数据相应地更改。
3)我甚至会动态更改图形内容(尽管我还没有这样做)。
现在我切换到横屏模式,那么
1)ScrollView显示ScrollView项目1、2、3、4
2)表格显示由于按下Gainer按钮而填充的数据。
3)图像与之前一样,因为我还没有更改它。(稍后我会更改)
所以当我更改方向时,我的活动将被重新启动。因此,如果用户在一个方向上执行某个任务,然后改变方向,则整个进度都将丢失。
我知道我需要保存活动状态并在方向更改时恢复它。但我不知道从哪里开始和保存什么。
任何帮助将拯救生命!
1个回答

12

选项1:重写您的ActivityonSaveInstanceState()方法,并将任何您想要放入的信息放入提供的Bundle中。您的新活动实例将在onRestoreInstanceState()(或onCreate())中收到该Bundle这里有一个演示此过程的示例项目

选项2:重写您的ActivityonRetainNonConfigurationInstance()方法,并返回表示状态的某个对象。您的新活动实例可以调用getLastNonConfigurationInstance()来检索该对象,以便新活动可以应用该信息。但是,请注意,千万不要让旧活动返回对象中留下对旧活动的引用(例如,小部件,常规内部类的实例)。 这里有一个演示此过程的示例项目

选项3:将此活动转换为片段。在其初始设置期间,使片段调用自身的setRetainInstance(true);方法。通过FragmentTransaction将片段动态添加到某个活动中。现在,当配置更改时,片段被保留,因此保留了所有的小部件和状态。 这里有一个过于复杂的演示此过程的示例应用程序

这些是现在推荐的三种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接