如何在屏幕方向发生改变时保存程序动态添加的视图?

5
我在保存屏幕旋转后的视图方面遇到了问题。这是我的情况:我有一个扩展HorizontalScrollView的类,在其构造函数中创建一个LinearLayout和一个按钮。当单击按钮时,将在LinearLayout中添加更多按钮。当活动启动时,我将操作栏设置为此自定义视图,一切都可以运行得很好,可以从LinearLayout中添加和删除按钮。但是,问题就在这里。如果切换方向,onCreate将重新启动,因此将创建一个新的自定义视图并将其设置为操作栏。因此,当我切换方向时,我的自定义视图会返回到起点。
如何在方向更改期间持久保存视图的层次结构?
2个回答

1
当屏幕方向改变时,活动会被销毁并重新创建。
在您的清单中为您的活动添加以下内容。
      <activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden|screenSize"
      android:label="@string/app_name">
      //Beginning with Android 3.2 (API level 13), the "screen size" also changes when the device switches between portrait and landscape orientation.
      //add screenSize for api 13 and above.   

现在,当这些配置之一发生更改时,MyActivity不会重新启动。相反,MyActivity会收到对onConfigurationChanged()的调用。该方法传递了一个Configuration对象,指定了新的设备配置。

http://developer.android.com/guide/topics/resources/runtime-changes.html


1
这样做的话,当我退出应用程序并一段时间后返回时,它会崩溃吗?我必须恢复最后的视图状态。这只是绕开它的简单方法,但它又带来了另一个问题。 - James Jun
当您退出应用程序时,活动将被销毁。因此,在启动时它将被重新创建。上述操作将防止在方向更改期间重新创建活动。 - Raghunandan
不建议这样做。你应该自己处理方向变化。 - Raghunandan

-1
最好的方法是在清单文件中将android:configChanges="orientation"添加到您的活动中,这将防止Android假定您想要的销毁和重新启动功能。实际上,我建议将其添加到任何没有不同横向和纵向模式布局文件的活动中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接