studio programacion para móviles español edición desarrollo desarrollar curso aprende aplicaciones android crash spinner android-5.0-lollipop

android - programacion - La aplicación se bloquea al seleccionar/desplazar elementos en Spinner.(LG Mobile)(java.lang.IllegalStateException: la iteración ya comenzó)



manual programacion android español pdf (3)

Aquí está mi solución. Puede que no sea una solución perfecta pero funcionó para mí. En mi archivo XML original, estaba usando GraphView encima spinner''s Layout la spinner''s Layout , como este

<LinearLayout android:id="@+id/main_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:weightSum="1" android:layout_alignParentTop="true"> <com.jjoe64.graphview.GraphView android:id="@+id/graph_view" android:layout_width="match_parent" android:layout_height="230dp" android:orientation="vertical" /> <LinearLayout android:layout_marginTop="10dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="80dp"> <Spinner android:layout_marginLeft="10dp" android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/SSspinner" android:layout_weight="1" /> <Spinner android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/Avgspinner" android:layout_weight="1" /> </LinearLayout> </LinearLayout>

El problema era algo nuevo, ya que no encontré ningún problema como este en la red. Después de leer de diferentes fuentes, me di cuenta de que es un problema de diseño. Esto es lo que hice entonces.

<LinearLayout android:layout_width="match_parent" android:layout_height="80dp" android:orientation="horizontal"> <Spinner android:id="@+id/SSspinner" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dp" android:layout_weight="1" /> <Spinner android:id="@+id/Avgspinner" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_weight="1" /> </LinearLayout> <LinearLayout android:layout_marginTop="80dp" android:id="@+id/main_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:orientation="vertical" android:weightSum="1"> <com.jjoe64.graphview.GraphView android:id="@+id/graph_view" android:layout_width="match_parent" android:layout_height="230dp" android:orientation="vertical" /> </LinearLayout>

Hice en la aplicación en la que el usuario tiene que seleccionar un número entero del Spinner . Estoy poblando el Spinner usando el Adapter . El código es así.

Integer[] intArray = new Integer[500]; for (int i = 0; i < 500; i++) intArray[i] = i + 1; ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_dropdown_item, intArray); spinner.setAdapter(adapter);

La aplicación está escrita para API-21 . Funcionó perfectamente en Samsung-mobile pero cuando intenté ejecutarlo en LG-Mobile , la aplicación se bloquea cada vez que estoy desplazando los elementos en la ruleta. El error es algo nuevo ya que no encontré un error similar. El error es así

process: com.example.temp.project, PID: 12142 java.lang.IllegalStateException: Iteration already started at android.view.ViewTreeObserver$CopyOnWriteArray.start(ViewTreeObserver.java:987) at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:811) at android.widget.PopupWindow.update(PopupWindow.java:1524) at android.widget.PopupWindow.update(PopupWindow.java:1654) at android.widget.PopupWindow.update(PopupWindow.java:1607) at android.widget.ListPopupWindow.show(ListPopupWindow.java:612) at android.widget.Spinner$DropdownPopup.access$701(Spinner.java:1069) at android.widget.Spinner$DropdownPopup$2.onGlobalLayout(Spinner.java:1178) at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:815) at android.widget.PopupWindow.update(PopupWindow.java:1524) at android.widget.PopupWindow.update(PopupWindow.java:1654) at android.widget.PopupWindow.update(PopupWindow.java:1607) at android.widget.ListPopupWindow.show(ListPopupWindow.java:612) at android.widget.ListPopupWindow$ResizePopupRunnable.run(ListPopupWindow.java:1759) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5299) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

Cualquier sugerencia de que cómo puedo resolver este problema.


Hasta que usted / (así como nosotros) no tengamos una respuesta perfecta, intente encerrar las declaraciones en un bloque try and catch, para que pueda obtener una pista de dónde está fallando la iteración (en qué índice) ...

Integer[] intArray = new Integer[500]; for (int i = 0; i < 500; i++) intArray[i] = i + 1; ArrayAdapter<Integer> adapter = null; try { adapter = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_dropdown_item, intArray); spinner.setAdapter(adapter); }catch(Exception e) { System.out.println("Iteration is "+i); e.printStackTrace(); }


Publicando una respuesta de los comentarios :

Resuelto este problema. En realidad, era cuestión de diseño. Spinner debe estar en la parte superior de otros diseños de fondo. Anteriormente, los gráficos GraphView eran de diseño frontal, pero ahora pongo a los Spinners en el diseño frontal y está funcionando bien.

y here :

Bueno, no tengo una respuesta específica, solo cambié mi estructura de archivos XML. Acaba de mover el Spinner encima de GraphView. Bueno, no es por adaptador. Se tocaron los adaptadores en todos los dispositivos, pero la aplicación se bloqueó solo en LG

Como se sugiere aquí: pregunta sin respuestas, pero problema resuelto en los comentarios (o extendido en el chat)