【问题标题】:Save activity state(not just some variables) on orientation change在方向改变时保存活动状态(不仅仅是一些变量)
【发布时间】:2011-12-17 04:21:54
【问题描述】:

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


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

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

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


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

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

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

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


现在我切换到横向模式所以

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

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

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


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

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

任何帮助都会挽救生命!

【问题讨论】:

    标签: android android-activity savestate


    【解决方案1】:

    选项#1:覆盖ActivityonSaveInstanceState(),并将所需的任何信息放入提供的Bundle 中。您的新活动实例将在onRestoreInstanceState()(或onCreate())中收到BundleHere is a sample project demonstrating this.

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

    选项#3:将此活动转换为片段。在初始设置期间让片段调用setRetainInstance(true);。通过FragmentTransaction 将片段动态添加到某些活动中。现在,当配置更改时,片段被保留,因此您的所有小部件和状态都被保留。 Here is an overly-complex sample application demonstrating this.

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 2019-10-17
      • 2019-08-10
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多