Android onConfigurationChanged没有被调用

我在告诉Android在方向更改时不要调用onCreate()遇到问题。 我已经将android:configChanges="orientation"到我的清单中,但仍然调用方向更改onCreate() 。 这是我的代码。

AndroidManifest.xml中

 <activity android:name="SearchMenuActivity" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation"></activity> 

SearchMenuActivity.java

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the current layout to the search_menu setContentView(R.layout.search_menu_activity); Log.d(TAG, "onCreate() Called"); } @Override public void onConfigurationChanged(Configuration newConfig) { //don't reload the current page when the orientation is changed Log.d(TAG, "onConfigurationChanged() Called"); super.onConfigurationChanged(newConfig); } 

和我的LogCat输出

 06-23 12:33:20.327: DEBUG/APP(2905): onCreate() Called //Orientation Changes 06-23 12:33:23.842: DEBUG/APP(2905): onCreate() Called 

有谁知道我在做什么错? 谢谢。

几件事情要尝试:

android:configChanges="orientation|keyboardHidden|screenSize"而不是android:configChanges="orientation"

确保你没有调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 任何地方。 这将导致onConfigurationChange()不会触发。

检查你的清单中没有使用android:screenOrientation

如果这些都不起作用,请仔细阅读Android文档,了解如何处理运行时更改,并确保正确地执行所有操作。 在你的代码中可能有其他的东西导致了这个问题。 http://developer.android.com/guide/topics/resources/runtime-changes.html

编辑:正如derrik指出的,我认为你正在改变configuration与加速度计检测设备面对的方式。 如果您希望在显示/隐藏键盘时更改configuration,清单中的configChanges也必须包含keyboardHidden

这是我同样的问题:

注意:从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,“屏幕大小”也会改变。 因此,如果要在API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)开发时防止因方向更改而导致运行时重新启动,则除了“方向”值之外,还必须包含“screenSize”值。 也就是说,你必须decalare android:configChanges =“orientation | screenSize”。 但是,如果您的应用程序的目标级别为12或更低,那么您的活动始终会自行处理此configuration更改(即使在Android 3.2或更高版本的设备上运行,此configuration更改也不会重新启动您的活动)。

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

TL; DR:为API 14+添加“| screenSize”到android:configChanges =“orientation”

尝试使用这一个…..

 android:configChanges="orientation|keyboardHidden|screenSize" 

您应该将AndroidManifest.xml中的configChanges条目更改为:

 android:configChanges="keyboardHidden|orientation" 

否则,即使方向改变,滑动键盘也不会触发onConfigurationChange()。 我只是testing了我的HTC Desire Z.

将其添加到您的清单,每个活动。

 android:configChanges="keyboardHidden|orientation|screenSize" 

然后,在你的活动上覆盖onConfigurationChanged

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } 

它没有在我的Fragment触发( Fragments未在AndroidManifest.xml注册),所以我不得不将它移动到pipe理我的FragmentActivity ,在我的情况下是TabsPagerActivity

performance:

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

活动与片段:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d(TAG, "onConfigurationChanged " + (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? "landscape" : "portrait")); } 

输出:

 10-29 21:53:26.951 D/FragmentOne: onConfigurationChanged landscape 10-29 21:53:26.951 D/MainActivity:onConfigurationChanged landscape