Android onConfigurationChanged no se llama

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

AndroidManifest.xml

  

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 de 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 no estar llamando a setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); en cualquier sitio. Esto causará que el Cambio de configuración () no se active.

Comprueba que no estés usando android:screenOrientation en tu manifiesto.

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

EDITAR: Como señaló Derrick, asumí que estabas cambiando la configuración con el acelerómetro detectando qué camino enfrentaba el dispositivo. Si desea que la configuración cambie a medida que se muestra / oculta el teclado, configChanges en el manifiesto también debe incluir keyboardHidden .

Este fue mi gremlin para el ~ mismo problema:

Precaución: a partir de Android 3.2 (nivel de API 13), el “tamaño de pantalla” también cambia cuando el dispositivo cambia entre la orientación vertical y horizontal. Por lo tanto, si desea evitar que se reinicie el tiempo de ejecución debido al cambio de orientación cuando se desarrolla para API nivel 13 o superior (según lo declarado por los atributos minSdkVersion y targetSdkVersion), debe incluir el valor “screenSize” además del valor de “orientación”. Es decir, debe descartar android: configChanges = “orientation | screenSize”. Sin embargo, si su aplicación se dirige al nivel API 12 o inferior, su actividad siempre maneja esta configuración por sí misma (este cambio de configuración no reinicia su actividad, incluso cuando se ejecuta en un dispositivo con Android 3.2 o superior).

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

TL; DR: agregue “| screenSize” a android: configChanges = “orientation” para API 14+

Intenta usar este …

 android:configChanges="orientation|keyboardHidden|screenSize" 

Debe cambiar la entrada configChanges en AndroidManifest.xml para:

 android:configChanges="keyboardHidden|orientation" 

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

Agregue esto a su manifiesto para cada actividad.

 android:configChanges="keyboardHidden|orientation|screenSize" 

A continuación, anule onConfigurationChanged en su actividad como tal

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

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

Manifiesto:

   

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 

Pocas cosas pueden ser verificadas:

En mi caso, estaba rastreando el cambio de idioma del dispositivo usando onConfigurationChanged.

Pocas cosas necesitan saber sobreConfigurationChanged hay alguna diferencia en el comportamiento entre onConfigurationChanged de Activity y Application.

Cuando cambie la configuración del dispositivo, se llamará de forma automática e inmediata al nivel de la aplicación en Cambio de configuración, pero en la actividad de cambio de configuración se ejecutará cuando navegue a esa actividad.

y otra cosa es que solo la configuración regional en el manifiesto no funcionará en algún momento. Así que has declarado otro evento de cambio de configuración junto con la configuración regional (en mi caso) que debería ser como android: configChanges = “layoutDirection | locale”