Android方向更改调用onCreate

Sam*_*mah 14 android android-orientation android-activity

我创建了一个搜索屏幕,其中包含一个用于关键字,过滤器和搜索按钮的选项卡,以及三个用于不同类型结果的可选选项卡(每个包含一个ListView带有a ArrayAdapter).启动活动时,Parcelable[]如果已执行搜索,开发人员可以选择将结果作为额外内容传递.在onCreate()方法中,我正在创建Parcelable[]传递的三个选项卡中的每一个.

当我从过滤器选项卡上的按钮调用搜索时,我清除选项卡并使用新结果重新创建它们,这非常有效.问题是,当您旋转设备时,Android的自动方向切换支持似乎会重新创建整个活动,即调用onCreate().这意味着我的搜索结果将重置为Parcelable[]启动活动时传递的内容.

到目前为止,我唯一的解决方案就是调用finish()然后startActivity()用新结果重新启动活动.我确信必须有一个更简单的解决方案,而且我做了一些非常无趣的事情.

有一个更好的方法吗?

Fed*_*dor 32

有cource的.只需将configChanges属性添加到AndroidManifest.xml,就像这样:

<activity android:name=".MyActivity" 
          android:configChanges="orientation|keyboardHidden" /> 
Run Code Online (Sandbox Code Playgroud)

在Android上旋转活动 如何在Android上禁用方向更改? http://developer.android.com/guide/topics/manifest/activity-element.html#config


Pra*_*ani 14

您描述的是默认行为.您必须通过添加以下内容来自行检测和处理这些事件:

android:configChanges
Run Code Online (Sandbox Code Playgroud)

到您的清单,然后是您想要处理的更改.因此,对于方向,您将使用:

android:configChanges="orientation"
Run Code Online (Sandbox Code Playgroud)

并且对于打开或关闭的键盘,您将使用:

android:configChanges="keyboardHidden"
Run Code Online (Sandbox Code Playgroud)

如果你想要处理两者,你可以使用管道命令将它们分开,如:

android:configChanges="keyboardHidden|orientation"
Run Code Online (Sandbox Code Playgroud)

这将onConfigurationChangedActivity您调用的任何内容中触发该方法.如果覆盖该方法,则可以传入新值.

希望这可以帮助.