我试图将项目添加到列表中,但是有一个错误,我无法弄清楚如何解决它。
以下是添加的示例:
for (Object object : mData) {
if (object instanceof BaseAdapter.ChoseFriendItem) {
mAdapter.addItem(1, object);
}
}
其中mDate - arraylist
执行代码后,我收到以下错误:
FATAL EXCEPTION: main
Process: com.akbars.bankok, PID: 15263 java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
at com.akbars.bankok.v2.ActivityChoseFriends.onClick(ActivityChoseFriends.java:311)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
然后我尝试使用迭代器。但是为什么它只添加一个元素而不是从列表的开头添加,这是一个例子:
for (ListIterator<Object> iterator = mData.listIterator(); iterator.hasNext();) {
if (iterator.next() instanceof BaseAdapter.ChoseFriendItem){
mAdapter.addItem(1, iterator.next());
return;
}
}
也许有人知道如何解决这个错误?
答案 0 :(得分:2)
这段代码你的代码应该是这样的:
for (ListIterator<Object> iterator = mData.listIterator(); iterator
.hasNext();) {
Object item = iterator.next();
if (item instanceof BaseAdapter.ChoseFriendItem){
mAdapter.addItem(1, item);
//return; There should be no return statement here.
}
}
您调用了iterator.next()两次,每次都会调用一个元素并给出不正确的结果。
答案 1 :(得分:1)
我有同样的问题,我的情况我拿了服务器响应列表:
localList = serverResponseList;
当我尝试添加新元素(localList.addAll(ListWithNewElements))时会收到相同的错误。
要避免此错误,您只需创建新列表,然后将新元素添加到新创建的列表中:
public ListAdapter(List<> itemCollections) {
this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.itemCollection = new ArrayList<>();
this.itemCollection.addAll(itemCollection);
}
public void addBarsCollection(List<Bar> itemCollection) {
this.itemCollection.addAll(itemCollection);
this.notifyDataSetChanged();
}
答案 2 :(得分:0)
我可以假设这是因为您只将元素添加到适配器中项目的第一个索引。
{{1}}
每次要向适配器添加新项目时,将第一个参数增加1。
答案 3 :(得分:0)
我不明白你在这做什么:
for (ListIterator<Object> iterator = mData.listIterator(); iterator.hasNext();) {
if (iterator.next() instanceof BaseAdapter.ChoseFriendItem){
mAdapter.addItem(1, iterator.next());
return;
}
}
您将每个下一个项目添加到第二个位置。为什么呢?
解决方案从位置0开始一个接一个地添加(&#34;信息计数&#34;):
while(iterator.hasNext())mAdapter.addItem(iterator.next());
如果这不起作用,我无法想象它为什么不应该尝试这个:
Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
mAdapter.addItem(iterator.next())
}
};
handler.post(r);