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.

  • ¿Cómo obtener el número de elementos en un spinner?
  • Alternativa a la CLASE SPINNER ALTAMENTE FLAWED en Android
  • Spinner.setSelection no activa OnItemSelectedListener correctamente
  • Cómo rellenar Spinner con ArrayList en Android
  • ¿Cómo establecer el valor predeterminado de Spinner por su valor en lugar de su posición?
  • Cambiar el tamaño de la fuente en el objeto del botón Spinner real
  • ¿Cómo hago para que el estado "deshabilitado" de un Spinner esté deshabilitado?
  • ¿Diversas vistas para el artículo del hilandero y del hilandero?
  • Spinner - cómo establecer la frontera alrededor de la lista desplegable?
  • Android Spinner OnItemSelected no se llama con el mismo elemento
  • Spinner onItemSelected llamado erróneamente (sin acción del usuario)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.