Problemas al manejar los cambios de orientación

Necesito manejar cambios de orientación en mi aplicación de Android. Para este propósito, decidí usar la clase de conveniencia OrientationEventListener . Pero su método de devolución de llamada se da un comportamiento algo extraño.

Mi aplicación se inicia en el modo de retrato y, a continuación, cambia a la lanscape uno. Tengo un código personalizado que se ejecuta en el método onOrientationChanged devolución de llamada que proporciona alguna lógica de manejo de interfaz de usuario adicional: tiene algunas llamadas a findViewById . Lo que es extraño es que cuando se cambia de nuevo de paisaje a modo vertical onOrientationChanged callback se llama dos veces, y lo que es aún peor – la segunda llamada se trata de mal ContextfindViewById método comienza a devolver null . Estas llamadas se realizan directamente desde MainThread

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); listener = new OrientationListener(); } @Override protected void onResume() { super.onResume(); // enabling listening listener.enable(); } @Override protected void onPause() { super.onPause(); // disabling listening listener.disable(); } 

He replicado el mismo comportamiento con una Activity ficticia sin ninguna lógica excepto para uno que se ocupa de orientación hadling. Inicie el cambio de orientación desde el emulador de Android 2.2 presionando Ctrl + F11 ¿Qué podría estar mal?

Actualización: Clase interna que implementa OrientationEventListener

 private class OrientationListener extends OrientationEventListener { public OrientationL() { super(getBaseContext()); } @Override public void onOrientationChanged(int orientation) { toString(); } } 

}

Este es un error documentado en el emulador SOLAMENTE. Un dispositivo real no exhibirá este comportamiento de doble ciclo de vida. Tuve el mismo problema hace un tiempo y desaparece en un dispositivo real.

Yo sugeriría ignorar el problema si usted puede probando cambios de orientación en una dirección hasta que usted consigue sus manos en un teléfono físico. De lo contrario, podría "omitir" el segundo conjunto de llamadas del ciclo de vida manteniendo un booleano estático alrededor de lo que indica que ya pasó por el primer conjunto.

Consulte este informe de incidencias para obtener más información.

¿Has intentado usar onConfigurationChanged?

 @Override public void onConfigurationChanged(Configuration newConfig) { if(newConfig.equals(Configuration.ORIENTATION_LANDSCAPE)… 

Añadir android: configChanges = "orientación" en el archivo de manifiesto en la etiqueta de actividad como

<activity android:label="@string/app_name" android:configChanges="orientation" android:name=".com.androidpeople">

  • La lista desplegable de Spinner y la orientación de la pantalla cambian el problema
  • Cambiar la orientación de la pantalla mediante un botón
  • Después de que los botones de cambio de orientación en un widget no responden
  • IU distorsionada con Android
  • Android: Detectar la orientación cambiada
  • Rotación del videobuffer real en Videoview
  • Fragmentos anidados pierden llamadas a onCreateOptionsMenu después de rotación de pantalla
  • Android: Guardar el estado de la aplicación en el cambio de orientación de la pantalla
  • Emulador de panal invertido pantalla en retrato
  • Android ListFragment no guarda el paquete en onSaveInstanceState () / no recupera el bundle en onActivityCreated ()
  • Establecer nuevo fragmento en la parte superior de la actividad no funciona con onConfiguration change
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.