una studio screenorientation rotate reiniciar guardar estado configchanges activity actividad android

android - studio - onConfigurationChanged no se llama



on save instance state android (16)

Esta mañana tuve un problema al tratar de manejar el evento onConfigurationChanged . El problema es que el método que anulo no se llama cuando cambio la orientación del teléfono. No ser llamado en absoluto.

He puesto android:configChanges="orientation" en la actividad definida en el manifiesto como se menciona en la documentación de Android, pero esto no hace la diferencia.

¿Has venido con este problema?


  1. Verifique que no esté usando android:screenOrientation en una Activity o en un nivel de Application .
  2. Intenta usar android:configChanges="orientation|keyboardHidden" lugar.

¿Tiene android.content.res.Configuration en sus estados de importación? Eclipse puede insertar importaciones automáticamente si presiona Ctrl+Shift+O

Si eso falta, el compilador no podrá reconocer que está anulando legítimamente el método de la superclase y arrojará un error.


@ thanhbinh84 Me dio una idea de lo que podría estar causando esto.
Al eliminar <item name="android:windowIsTranslucent">true</item> de mi tema en styles.xml, se solucionó.


Acabo de encontrar que si tienes:

android:screenOrientation="landscape"

en el manifiesto, onConfigurationChanged () tampoco se llamará ...

esto puede ser similar a:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

esa orientación de configuración bloquea el onConfigurationChanged ().


Algunos dispositivos de 4.0 no invocan aConfigurationChanged. Solo agregue un oyente a screenSize también.

android:configChanges="orientation|screenSize"


El problema es que si usas este método

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

para forzar la orientación de su Activity al modo vertical, no es candidato para recibir cambios de orientation .

Entonces la solución es no establecer la setRequestOrientation a un modo particular. En su lugar, use SCREEN_ORIENTATION_SENSOR.


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 configChanges al orientar el nivel de API 13+


Macarse está 100% en el dinero con su segunda opción.

Pruebe con android:configChanges="orientation|keyboardHidden|screenSize"

Tenía exactamente el mismo problema, y ​​en el emulador 1.6, agregar keyboardHidden provoca que se llame onConfigurationChanged durante la rotación. Quítalo y deja de ser llamado.


Ninguna de las sugerencias funcionó para mí (había reaccionado proyecto nativo con este problema), pero después de horas de depuración encontré que si tienes esta línea en el AppTheme de styles.xml

<item name="android:windowIsTranslucent">true</item>

entonces la aplicación no girará.


No estoy seguro de que este sea el mejor lugar para ello, pero al enfrentar este problema, observé algo interesante.

Si el oyente onConfigurationChanged () NO está funcionando, se llama nuevamente a onCreate () cada vez que se cambia la orientación.

Si el oyente onConfigurationChanged () está funcionando, entonces se llama a ese método en lugar de onCreate () cuando cambia la orientación.


Pasé decenas de minutos para descubrir por qué no funcionó. screenSize pero todavía no funcionó.

¡Resultó que había agregado android:configChanges al elemento <application> , no al elemento <activity> como debería!

Bueno, por supuesto, este fue mi error, pero todos sabemos que todos pasamos mucho tiempo para este tipo de error tonto. Entonces, estoy agregando esta respuesta solo en caso de que haya otro programador tonto como yo.


Todas las soluciones no funcionan. Intento eliminar la actividad de mi tema en el archivo de manifiesto de Android. Tan extraña

<activity android:name="MyActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@style/MyTheme" --> remove this line /> <style name="MyTheme" parent="Theme.AppCompat.NoActionBar"> <item name="windowNoTitle">true</item> <item name="android:windowIsTranslucent">true</item> </style>


Tuve el mismo problema y tuve tanto "android: screenOrientation" como "android: configChanges" especificados en manifest. Cuando eliminé el primero, se llama a OnConfigurationChanged () en la rotación. Extraño pero funciona


Tuve el mismo problema: no se llamó a onConfigurationChanged cuando el dispositivo cambió de orientación a pesar de tener android:configChanges="orientation|keyboardHidden" en el archivo de manifiesto. Utilicé el código cortado compartido por Deva aquí

orientación no funciona en 2.3.3?

para verificar si onConfigurationChanged se estaba llamando. No era.

Después de algunas horas de experimentación, me di cuenta de que tenía las siguientes líneas en el archivo de manifiesto

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/>

y al cambiar android:targetSdkVersion="15" a android:targetSdkVersion="8" , onConfigurationChanged comenzó a llamarse. Entonces, parte del manifiesto finalmente se veía así

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"/>


Verifique que su dispositivo tenga la configuración "Rotación de pantalla" ENCENDIDA


<uses-sdk android:minSdkVersion="8" android:maxSdkVersion="17" />

No use ninguna versión SDK objetivo para hacerle una complicación. y para todos los niveles de API use esto como detector de cambio de configuración

android:configChanges="orientation|keyboardHidden|screenLayout"