Подтвердить что ты не робот

Сбой приложения при выборе/прокрутке элементов на Spinner. (LG Mobile) (java.lang.IllegalStateException: Итерация уже запущена)

Я сделал приложение, в котором пользователю нужно выбрать целое число из Spinner. Я заполняю Spinner с помощью Adapter. Код такой.

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);

Приложение написано для API-21. Он отлично работал на Samsung-mobile, но когда я попытался запустить его на LG-Mobile, приложение рушится всякий раз, когда я прокручиваю элементы в счетчике. Ошибка - это что-то новое, поскольку я не нашел подобную ошибку. Ошибка выглядит так:

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)

Любой намек на то, как я могу решить эту проблему.

4b9b3361

Ответ 1

Вот мое решение. Это может быть не идеальное решение, но работало для меня. В моем исходном файле XML я использовал GraphView над spinner Layout, как этот

<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>

Проблема была новой, поскольку я не нашел такой проблемы в сети. Прочитав из разных источников, я понял, что это вопрос макета. Это то, что я сделал тогда

<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>

Ответ 2

Проводя ответ из комментариев:

решил эту проблему. На самом деле это была проблема с макетом. Spinner должен быть на вершине других макетов фона. Раньше графики GraphView были передними макетами, но теперь я поставил Spinners на передний план, и он работает нормально.

и здесь:

Ну, у меня нет конкретного ответа, я просто изменил структуру XML файла. Просто переместил Spinner поверх GraphView. Ну это не из-за адаптера. Адаптеры были затронуты на каждом устройстве, но приложение разбилось только в LG

Как предлагается здесь: Вопрос без ответов, но проблема решена в комментариях (или расширена в чате)

Ответ 3

До того, как вы/(как и мы) не получим идеального ответа, попробуйте включить утверждения в блок try и catch, чтобы вы могли понять, где итерация (по какому индексу) терпит неудачу..

  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();
    }