Android onConfigurationChanged()不在Activity中被调用

我意识到这个主题还有一些其他的post,但是这些post的解决scheme并不适合我。

基本上,我想停止我的活动重新启动设备方向更改。 为此,我修改了清单文件中的活动:

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

我在我的活动中覆盖onConfigurationChanged()

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); System.out.println("IN onConfigurationChanged()"); } 

但是,方向更改后该活动仍然重新启动,并且onConfigurationChanged()方法未被调用。

有谁知道为什么这可能会发生?

Solutions Collecting From Web of "Android onConfigurationChanged()不在Activity中被调用"

您应该使用13 API,并在清单的活动部分中设置此configuration:android:configChanges =“orientation | keyboardHidden | screenSize”

它工作正常。 在所有的Android版本。

唯一有用的是使用getLastNonConfigurationInstance()。 http://developer.android.com/reference/android/app/Activity.html#getLastNonConfigurationInstance ()

你不应该使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 方法调用你的应用程序中的任何地方,这将避免调用onConfigChanged()方法。

将您的清单更改为以下

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

并参考这个链接详细的解释方向问题

如果你在你的清单中定义了configchanges = orientation,那么这个activity将不会重新启动,而是会调用onConfigurationChanged,就像你现在已经实现了一样。 首先尝试使用日志类Log(这是在Android中logging事情的正确方法,不要使用System,因为这被认为是一个糟糕的做法),超级之前,但这只是1%的机会,它将解决什么正在发生在你身上

第二种情况是,您将当前活动嵌套在tabHost(例如Activity Group)中。 如果你的活动有一个父活动,那么需要在那个活动中添加configuration更改,callback将在那里发生。

如果是这种情况,你想要转发结果,或者也在孩子做什么,那么你需要得到一个在父母的孩子的引用,并调用一个方法在其上的变化。

如果你有一个片段,那么你也需要这个:

 void setRetainInstance(boolean retain) 

控制是否在重新创buildActivity(例如从configuration更改)中保留片段实例。

我碰到这个,并设置为“真正的”固定它。

我用这个,它帮助:

 package="com.s2dio.evallet" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" /> 

Modefiy你的onConfigurationChanged方法如下

 public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } }