La lista desplegable de Spinner y la orientación de la pantalla cambian el problema

Tengo un problema con una lista desplegable de hilandero y orientaciones cambiantes.

En mi actividad, muestro un diálogo en el que tengo dos hilanderos. Cuando el diálogo se muestra al usuario y el usuario cambia la orientación de la pantalla, todo está bien– en mi onPause, simplemente descarto el diálogo.

Si el usuario pulsa en la hiladora, una lista desplegable se muestra al usuario antes de cambiar la orientación. Pero he encontrado un error cuando el usuario no selecciona nada en la lista desplegable, y simplemente deja la lista expandida antes de cambiar la orientación.

He intentado muchas cosas para solucionar este problema (es decir, spinner.setSelection(0) en onSaveInstanceState() , etc.). Mi idea es cerrar la lista desplegable del código cuando el usuario no selecciona el elemento y se produce un cambio de orientación.

El error es sobre Android.WindowLeaked :

 E/WindowManager( 2455): Activity pl.myapp.WebViewActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@45041e60 that was originally added here E/WindowManager( 2455): android.view.WindowLeaked: Activity pl.myapp.WebViewActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@45041e60 that was originally added here E/WindowManager( 2455): at android.view.ViewRoot.<init>(ViewRoot.java:247) E/WindowManager( 2455): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) E/WindowManager( 2455): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) E/WindowManager( 2455): at android.view.Window$LocalWindowManager.addView(Window.java:424) E/WindowManager( 2455): at android.app.Dialog.show(Dialog.java:241) E/WindowManager( 2455): at android.app.AlertDialog$Builder.show(AlertDialog.java:802) E/WindowManager( 2455): at android.widget.Spinner.performClick(Spinner.java:257) E/WindowManager( 2455): at android.view.View$PerformClick.run(View.java:8816) E/WindowManager( 2455): at android.os.Handler.handleCallback(Handler.java:587) E/WindowManager( 2455): at android.os.Handler.dispatchMessage(Handler.java:92) E/WindowManager( 2455): at android.os.Looper.loop(Looper.java:123) E/WindowManager( 2455): at android.app.ActivityThread.main(ActivityThread.java:4627) E/WindowManager( 2455): at java.lang.reflect.Method.invokeNative(Native Method) E/WindowManager( 2455): at java.lang.reflect.Method.invoke(Method.java:521) E/WindowManager( 2455): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) E/WindowManager( 2455): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) E/WindowManager( 2455): at dalvik.system.NativeStart.main(Native Method) 

Además, este error aparece:

 D/AndroidRuntime( 2455): Shutting down VM W/dalvikvm( 2455): threadid=1: thread exiting with uncaught exception (group=0x4001d800) E/AndroidRuntime( 2455): FATAL EXCEPTION: main E/AndroidRuntime( 2455): java.lang.IllegalArgumentException: View not attached to window manager E/AndroidRuntime( 2455): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355) E/AndroidRuntime( 2455): at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200) E/AndroidRuntime( 2455): at android.view.Window$LocalWindowManager.removeView(Window.java:432) E/AndroidRuntime( 2455): at android.app.Dialog.dismissDialog(Dialog.java:278) E/AndroidRuntime( 2455): at android.app.Dialog.access$000(Dialog.java:71) E/AndroidRuntime( 2455): at android.app.Dialog$1.run(Dialog.java:111) E/AndroidRuntime( 2455): at android.app.Dialog.dismiss(Dialog.java:268) E/AndroidRuntime( 2455): at android.widget.Spinner.onDetachedFromWindow(Spinner.java:86) E/AndroidRuntime( 2455): at android.view.View.dispatchDetachedFromWindow(View.java:6033) E/AndroidRuntime( 2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1158) E/AndroidRuntime( 2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) E/AndroidRuntime( 2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) E/AndroidRuntime( 2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) E/AndroidRuntime( 2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) E/AndroidRuntime( 2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) E/AndroidRuntime( 2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) E/AndroidRuntime( 2455): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1156) E/AndroidRuntime( 2455): at android.view.ViewRoot.dispatchDetachedFromWindow(ViewRoot.java:1630) E/AndroidRuntime( 2455): at android.view.ViewRoot.doDie(ViewRoot.java:2671) E/AndroidRuntime( 2455): at android.view.ViewRoot.handleMessage(ViewRoot.java:1948) E/AndroidRuntime( 2455): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime( 2455): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime( 2455): at android.app.ActivityThread.main(ActivityThread.java:4627) E/AndroidRuntime( 2455): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 2455): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime( 2455): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) E/AndroidRuntime( 2455): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) E/AndroidRuntime( 2455): at dalvik.system.NativeStart.main(Native Method) 

EDITAR

SOLUCIÓN:

Finalmente encontré la causa de este * & # $% error. En el manifiesto en mi actividad tengo android: configChanges = "orientación", cuando lo cambio a android: configChanges = "keyboardHidden | orientación" el problema ha desaparecido!

Thx 4 ayuda!

Tuve una idea para evitar cambios de orientación cuando se muestra diálogo con spinner, pero encontré que no hay forma confiable de hacerlo . La mejor solución que encontré es reemplazar a spinner con un botón .

La respuesta está aquí: la aplicación se bloquea cuando el diálogo de alerta está abierto y el teléfono (emulador) cambia su orientación . Mira la respuesta de MegaMind para ayudar a resolver esto.

Esto ocurre porque onDetachedFromWindow () no se llama en el hilador cuando se llama a dialog.dismiss (). La solución para esto es crear una clase simple de spinner personalizado que expone este método.

  public class DialogSpinner extends Spinner { public DialogSpinner(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onDetachedFromWindow() { super.onDetachedFromWindow(); } } 

Ahora el método onDetachedFromWindow () está disponible públicamente. A continuación, en su clase de diálogo, reemplace el método onPause ().

  @Override public void onPause() { mYourSpinner.onDetachedFromWindow(); super.onPause(); } 

Es sin duda una solución, pero parece que hacer el truco.

  • Guardar el valor del elemento seleccionado mediante la preferencia compartida
  • Cómo hacer una fecha spinner en Android
  • Spinner error gráfico API 21
  • Spinner con ArrayAdapter personalizado para objetos que no muestran el elemento seleccionado
  • Por que enNo se selecciona ningunoSeleccionado
  • Android: Cree el hilador de forma programática desde el array
  • ¿Cómo se puede utilizar un marcador de posición de carga que es un spinner animado con cargadores de imágenes como Glide, Picasso etc?
  • Diferencia entre android.R.layout.simple_spinner_dropdown_item y android.R.layout.simple_spinner_item
  • Cómo crear editable spinner en android?
  • Establecer el modo spinner en XML
  • Spinner elemento prensado fondo azul
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.