3

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

就像是:

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

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

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

        super.onConfigurationChanged(cfg);

        loadState();
    }

在 saveState 上,我将在 Gallery 上查看的 lastIndex 存储在 SharedPreferences 上。在 loadState 上,我从 SharedPreferences 中获取 lastIndex 并将其设置为 Gallery 中的当前位置。

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

4

2 回答 2

4

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

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

发生时(动画目的)

这是由操作系统处理的。

发生后(加载屏幕状态)

使用onRestoreInstanceState()和/或getLastNonConfigurationInstance()(如果你走片段路线,你的数据自然还在那里)

我知道 onConfigurationChanged 可以处理方向变化。

@EightEight 的回答很好地涵盖了这一点。

于 2011-10-21T00:31:09.347 回答
3

你可能有点困惑。

这是来自api 文档

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

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

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

HTH。

于 2011-10-20T21:57:42.603 回答