保存旋转屏幕时的活动状态

问题描述:

我正在研究Android应用程序,现在我限制用户只对所有活动使用水平视图。保存旋转屏幕时的活动状态

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

任何想法如何保存旋转屏幕时的状态?

首先,您必须在您的活动中覆盖覆盖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"> 

我也很喜欢马尔科的想法,但它只是效率不高。这样,我们不必调用Create/onStartup /等。我们一直在做简单的旋转。没有必要从头开始“重建”基础设施(例如获取视图,..)

+0

请注意,文档建议不要这样做,但它也是这样做的;) – codeMagic 2013-03-22 13:17:19

+0

@codeMagic请问您可以发布一个链接吗? – poitroae 2013-03-22 13:35:05

+0

它在官方安卓网站上,因为configChanges =“oriantatin | keyboardHidden”没有照顾所有可能的变化,你有更多的Android默认照顾,并通过覆盖它预计你照顾他们 – 2013-03-22 13:36:28

每次旋转设备时,都会再次调用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); 
    } 
+0

但我想保存活动的视图不值。我有一个带有文本视图的表格,如果用户点击文本视图中的文本更改,当您翻转屏幕时,文本视图的文本会更改为原始视图。 – Mike 2013-03-22 13:25:44

+0

所以你得到textview的文本像字符串textViewtext = textview.getText();那么不是保存布尔值,而是保存该字符串..? – 2013-03-22 13:28:42

+0

或者您正在动态添加文字浏览? – 2013-03-22 13:29:20

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

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