2010-06-22 51 views
13

我做了一个搜索屏幕,其中包含关键字,过滤器和搜索按钮的一个选项卡,以及针对不同类型结果(每个都包含ListViewArrayAdapter)的三个可选选项卡。开始活动时,如果搜索已执行,开发人员可以选择将结果作为额外的Parcelable[]传入。在onCreate()方法中,我创建了通过Parcelable[]的三个选项卡中的每一个。Android方向更改调用onCreate

当我从过滤器选项卡上的按钮调用搜索时,我清除选项卡并使用新结果重新创建它们,这很好地起作用。问题在于,当您旋转设备时,Android的自动方向切换支持会重新创建整个活动,请拨打onCreate()。这意味着我的搜索结果重置为开始活动时通过的Parcelable[]

我到目前为止唯一的解决方案是致电finish(),然后startActivity()实质上重新开始活动与新的结果。我确信必须有一个更简单的解决方案,而且我做了一些非常不喜欢的事情。

有没有更好的方法来做到这一点?

+1

4年后,你编辑我的问题来改变格式?也许你应该对ListView,ArrayAdapter和Parcelable执行相同的操作。你也错过了第二段中的onCreate()。 – Samah 2015-02-10 22:55:56

+2

为什么不是抱怨Pratik Butani没有全部格式化,而是自己改进格式? – 2015-11-27 15:20:26

+0

你错过了一个。 :P – Samah 2015-12-02 21:44:31

回答

31

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

<activity android:name=".MyActivity" 
      android:configChanges="orientation|keyboardHidden" /> 

Activity restart on rotation Android How do I disable orientation change on Android? http://developer.android.com/guide/topics/manifest/activity-element.html#config

+0

谢谢!我将我的SearchResults实例移动到一个应用程序单例中,它都可以工作。 :)为Android 3.2(API级别13)和更新的 – Samah 2010-06-23 01:17:39

+0

:android:configChanges =“keyboardHidden | orientation | screenSize” – Vlad 2016-03-17 23:28:34

13

你描述的是默认的行为。您必须自行检测并处理这些事件:

android:configChanges 

您的清单以及您想要处理的更改。因此,对于方向,你可以使用:

android:configChanges="orientation" 

和键盘被打开或关闭,您可以使用:

android:configChanges="keyboardHidden" 

如果要同时处理你可以用管道命令一样将它们分开:

android:configChanges="keyboardHidden|orientation" 

这将触发任何Activity调用onConfigurationChanged方法。 如果覆盖可以传入新值的方法。

希望这会有所帮助。