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.
- Cómo seleccionar el primer elemento de un spinner en una prueba
- Spinner eliminar elementos
- Spinner Dropdown CheckedTextView Autoscroll
- ¿Cómo puedo añadir mi spinner a la ActionBar?
- cómo implementar agregar elemento en adaptador de matriz spinner en android
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!
- Android spinner con subrayado appcompat
- Android: dos Spinner onItemSelected ()
- Spinner con vista diferente para cada elemento
- Establecer el elemento seleccionado de la hiladora mediante programación
- Cómo deshabilitar onItemSelectedListener que se invocará al configurar el elemento seleccionado por código
- Uso correcto de un Spinner, siguiendo las directrices de diseño del material
- Android - ¿Cómo puedo cambiar un valor de spinner sin activar setOnItemSelectedListener
- Android: Cree el hilador de forma programática desde el array
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.
- Cambiar las actividades mediante ActivityGroup en la pestaña (Android)
- Referencia de método llama método incorrecto