旋转屏幕时保存活动状态

时间:2013-03-22 13:09:37

标签: java android rotation

我正在开发一个Android应用程序,现在我限制用户只对所有活动使用水平视图。

我希望能够为用户提供旋转屏幕的选项,但是当我这样做时,活动从头开始而不是保持不变。

知道如何在旋转屏幕时保存状态吗?

3 个答案:

答案 0 :(得分:5)

首先,您必须在活动中覆盖onConfigurationChanged(Configuration)

 public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
  }

您还必须编辑清单文件中的相应元素以包含android:configChanges只需看下面的代码:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

我也喜欢Marko的想法,但它效率不高。这样,我们就不必调用onCreate / onStartup / etc.我们一直做一个简单的旋转。无需从头开始“重建”基础架构(例如,获取视图,...)

答案 1 :(得分:2)

每次旋转设备时,都会再次调用onCreate方法。您可以通过覆盖onSavedInstanceState来保存值,并将它们返回onRestoreInstanceState或onCreate方法。例如,让我们保存布尔值(你可以保存你想要的任何东西):

保存值:

public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean("booleanValue", true);
}

恢复该值(您也可以在onCreate中调用它):

protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if (savedInstanceState != null && savedInstanceState.containsKey("booleanValue")) {
            boolean myBoolean = savedInstanceState.getBoolean("booleanValue");
        }
        super.onRestoreInstanceState(savedInstanceState);
    }

答案 2 :(得分:0)

<activity (...)
          android:configChanges="orientation|keyboard"
          (...)>

将此添加到清单中不允许Android在查看布局后重新启动活动。