Android onConfigurationChanged no se llama

Tengo problemas con decirle a Android que no llame a onCreate() cuando cambie la orientación. He añadido android:configChanges="orientation" a mi manifiesto pero aún cuando la orientación cambia onCreate() se llama. Aquí está mi código.

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); } 

Y mi salida 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 

¿Alguien sabe lo que estoy haciendo mal? Gracias.

Un par de cosas para probar:

android:configChanges="orientation|keyboardHidden|screenSize" lugar de android:configChanges="orientation"

Asegúrese de que no está llamando a setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); en cualquier sitio. Esto hará que onConfigurationChange () no se dispare.

Comprueba que no android:screenOrientation en tu manifiesto.

Si nada de eso funciona, lea el documento de Android sobre el manejo de los cambios de tiempo de ejecución y asegúrese de que está haciendo todo correctamente. Puede haber algo en su código que esté causando el problema. http://developer.android.com/guide/topics/resources/runtime-changes.html

EDIT: Como Derrik señaló, asumí que estaba cambiando la configuración con el acelerómetro detectar la forma en que el dispositivo se enfrentaba. Si desea que la configuración cambie al mostrar / ocultar el teclado, los configChanges en el manifiesto también deben incluir keyboardHidden .

Este fue mi gremlin para el mismo problema:

Precaución: A partir de Android 3.2 (API nivel 13), el "tamaño de pantalla" también cambia cuando el dispositivo cambia entre orientación vertical y horizontal. Por lo tanto, si desea evitar que el tiempo de ejecución se reinicie debido al cambio de orientación al desarrollar para API de nivel 13 o superior (como declarado por los atributos minSdkVersion y targetSdkVersion), debe incluir el valor "screenSize" además del valor "orientation". Es decir, debes decalar android: configChanges = "orientation | screenSize". Sin embargo, si su aplicación se orienta al nivel de API 12 o inferior, su actividad siempre se encarga de este cambio de configuración (este cambio de configuración no reinicia su actividad, incluso cuando se ejecuta en un dispositivo Android 3.2 o superior).

(De http://developer.android.com/guide/topics/resources/runtime-changes.html )

TL; DR: agregue "| screenSize" a android: configChanges = "orientación" para API 14+

Trate de usar este

 android:configChanges="orientation|keyboardHidden|screenSize" 

Debe cambiar la entrada configChanges en AndroidManifest.xml a:

 android:configChanges="keyboardHidden|orientation" 

De lo contrario, al deslizar el teclado no se activa onConfigurationChange () aunque cambie la orientación. Acabo de probar esto en mi HTC Desire Z.

Añada esto a su manifiesto a cada actividad.

 android:configChanges="keyboardHidden|orientation|screenSize" 

Luego, anule onConfigurationChanged en su actividad como tal

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

No estaba desencadenando en mi Fragment ( Fragments no están registrados en el AndroidManifest.xml ) así que tuve que moverlo a la Activity maneja mi Fragment , en mi caso el TabsPagerActivity .

Manifiesto:

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

Actividad y Fragmento:

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

Salida:

 10-29 21:53:26.951 D/FragmentOne: onConfigurationChanged landscape 10-29 21:53:26.951 D/MainActivity:onConfigurationChanged landscape 
  • Android: configuración forzosa restablecida en los cambios de orientación
  • ¿Evita que la orientación de Live Wallpaper cambie cuando se abre una aplicación y se cambia la orientación?
  • ¿Cuáles son los pros y los contras de usar configChanges = "orientación" para dispositivos Android?
  • Datos EXIF ​​de Android siempre 0, cómo cambiarlo?
  • Cómo obtener los ángulos euler del vector de rotación (Sensor.TYPE_ROTATION_VECTOR)
  • Android: deshabilita las rotaciones de 90 °, pero permite rotaciones de 180 °
  • Android: La preferencia programática 'permitir reorientación' funciona sólo una vez
  • Los metadatos Exif no proporcionan orientación para las imágenes de unidades de Google
  • Mi aplicación Android gira aunque la rotación de la pantalla esté desactivada en el sistema operativo. ¿Cómo puedo arreglar esto?
  • Cómo controla la orientación de la pantalla del dispositivo Android
  • ¿Cómo puedo obtener la orientación actual de la pantalla?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.