我在应用程序中,用户必须从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.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)
任何关于我如何解决这个问题的提示。
发布于 2015-12-21 08:47:22
这是我的解决方案。这可能不是一个完美的解决方案,但对我来说很有效。在我最初的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>
发布于 2015-12-19 23:35:27
直到你(和我们一样)没有一个完美的答案,试着把语句包含在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();
}
https://stackoverflow.com/questions/33862449
复制相似问题