当 Spinner 上有 Selecting/Scrolling 项时,应用程序崩溃。 (LG Mobile)(java.lang.IllegalStateException:迭代已经开始)

App crashing when Selecting/Scrolling items on Spinner. (LG Mobile) (java.lang.IllegalStateException: Iteration already started)

我开发的应用程序中,用户必须 select 来自 Spinner 的整数。我正在使用 Adapter 填充 Spinner。代码是这样的。

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.access1(Spinner.java:1069)
            at android.widget.Spinner$DropdownPopup.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)

关于我如何解决这个问题的任何提示。

发布来自 的回答:

solved this issue. Actually, it was layout issue. Spinner needs to be on the top of other background layouts. Previously, GraphView charts were front layout but now I put Spinners on the front layout and it's working okay.

:

Well, I don't have any specific answer, I just changed my XML file structure. Just moved the Spinner on top of the GraphView. Well it's not because of Adapter. Adapters were touched on every device but app crashed only in LG

这里建议:Question with no answers, but issue solved in the comments (or extended in chat)

直到你/(以及我们)没有一个完美的答案,尝试将语句包含在一个 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();
    }

这是我的解决方案。它可能不是一个完美的解决方案,但对我有用。在我原来的 XML 文件中,我在 spinner's Layout 上方使用 GraphView,像这样

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