我有一个ListView,它可以显示一些数据,并且在底部有一个按钮,可以按下它来加载更多的数据。如下所示:
CustomArrayAdapter a = GetInitialData();
LayoutInflater layoutInflater =
(LayoutInflater)context.getSystemService( Context.LAYOUT_INFLATR_SERVICE );
LinearLayout ll =
(LinearLayout)layoutInflater.inflate(R.layout.more_button_layout, null, false);
Button b = (Button)ll.findViewById(R.id.more_button);
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
a.loadNextPage();
}
});
lv.addFooterView(ll);
lv.setAdapter(a);问题是,无论何时我按下按钮,我都会在适配器拥有的迭代器中得到一个ConcurrentModificationException。我相信这是因为当某个东西在遍历列表时调用了loadNextPage(),但是我想不出如何才能改变这种情况。
发布于 2011-10-28 20:42:09
请参阅以下URL http://www.javacodegeeks.com/2011/05/avoid-concurrentmodificationexception.html
或者尝试使用CopyOnWriteArrayList
当不允许对对象进行并发修改时,检测到此类修改的方法可能会抛出此异常。
例如,当另一个线程--或同一个线程--在集合上迭代时,通常不允许一个线程修改该集合。
请注意,此异常并不总是指示某个对象已被另一个线程并发修改。如果单个线程发出一系列违反对象契约的方法调用,则该对象可能会抛出此异常。例如,如果线程在使用快速失败迭代器迭代集合时直接修改集合,则迭代器将处理此异常。
示例:
for (Iterator it = myCollection.iterator(); it.hasNext()) {
Object myObject = it.next();
if (someConditionIsTrue) {
// myCollection.remove(myObject); // wrong can throw ConcurrentModificationException
it.remove(myObject); // right
}
} https://stackoverflow.com/questions/7929275
复制相似问题