处理方向变化的状态

时间:2011-10-20 21:48:14

标签: android android-lifecycle orientation-changes android-activity android-orientation

如何处理定向事件发生的所有状态?

类似的东西:

  • 开始之前(保存一些屏幕状态)
  • 发生时(动画目的)
  • 发生后(加载屏幕状态)

我知道 onConfigurationChanged 可以处理方向更改。我试过这个:

    public void onConfigurationChanged(Configuration cfg) {
        saveState();

        super.onConfigurationChanged(cfg);

        loadState();
    }

在saveState上,我存储了在SharedPreferences上的Gallery上查看的lastIndex。 在loadState上,我从SharedPreferences获取lastIndex并将其作为Gallery上的当前值。

我尝试将loadState放在onResume方法中,但在方向更改发生后不会调用它。

2 个答案:

答案 0 :(得分:4)

  

开始之前(保存一些屏幕状态)

使用onSaveInstanceState()和/或onRetainNonConfigurationInstance()和/或您调用setRetainInstance(true)的片段

  

发生时(动画目的)

由操作系统处理。

  

发生后(加载屏幕状态)

使用onRestoreInstanceState()和/或getLastNonConfigurationInstance()(如果您使用了片段路径,您的数据自然仍然存在)

  

我知道onConfigurationChanged可以处理方向更改。

@EightEight's answer很好地涵盖了这一点。

答案 1 :(得分:3)

你可能有点困惑。

这来自api docs

  

public void onConfigurationChanged(Configuration newConfig)当您的活动正在运行时,设备配置发生变化时系统调用。请注意,只有在清单中选择了要使用configChanges属性处理的配置时,才会调用此方法。

如果您在AndroidManifest中指定了参数,系统将通过调用onConfigurationChanged()通知您方向更改。如果你没有设置标记,那么Android会终止你的活动,开始一个正确定位的新活动,然后拨打onResume()

如果您希望在活动完成方向更改并且全部布局后收到通知,我建议在您的一个子视图中覆盖onDraw()方法。到那时一切都已完成,例如你可以在方向改变之前恢复状态。

HTH。