Honeycomb中的屏幕方向更改

18

我有一个活动在屏幕方向变化后不应该被重新创建。我在清单文件中的活动声明中添加了以下内容:

android:configChanges="orientation"

在Android 2.3上,这个功能运行得很完美。在HONEYCOMB_MR2上,当更改方向时仍会调用onCreate。是否需要在HONEYCOMB_MR2上执行其他操作以防止在方向更改后重新创建活动?

你试过android:configChanges="keyboardHidden|orientation"吗?我不认为这会有什么区别,但试一试也无妨。 - CommonsWare
@CommonsWare它本来不行,但是我尝试了所有可能的值,找到了一个可行的。请看我的回答。 - hpique
1个回答

38

显然在Honeycomb上使用orientation|screenSize (?)会阻止onCreate被调用,在之前的Android版本中似乎没有破坏任何东西。

android:configChanges="orientation|screenSize"

不知道为什么这是必要的,我也不太理解关于这个新值的文档

我怀疑,在 HONEYCOMB_MR2 版本中,当屏幕方向发生变化时,活动将把此视为两个配置更改:方向和屏幕大小。默认情况下,两者都尝试重新创建活动。


是的,这些是新的。你的android:targetSdkVersion值是多少? - CommonsWare
2
好的,那将会触发文档中所说的内容。这与新的资源集限定符有关:http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html 基本上,由于他们扩展了以前的小/正常/大/超大和端口/横向等内容,以包括基于尺寸的资源集,因此他们将考虑这些尺寸的更改为配置更改。可以想象,可能会有一些设备,这些尺寸的更改不是通过方向进行的(例如,具有可切换开/关的第二屏幕的双屏设备)。 - CommonsWare
有道理。遗憾的是,安卓的灵活性正在使它变得非常复杂。 - hpique
我在configChanges中没有设置screenSize,这导致了IllegalStateException,指出一个fragment未附加到activity上。我搜索了所有地方以找出原因,因为只有某些设备(3.2及以上版本)才会出现此问题(尽管我直到发现此问题之前并不知道)。谢谢! - ashughes
@CommonsWare 先生,我有一个片段,在某些点击时会被添加、隐藏和暂停。但是当我更改语言环境时,该片段会消失。它在4.2.2和4.0上运行正常,但在3.2上不行。我已经调用了该片段,但它根本没有出现,可能出了什么问题?请协助解决。 - Rat-a-tat-a-tat Ratatouille
显示剩余2条评论

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