在添加之前,每个循环都可以正常工作,但删除则不然,所以我使用了迭代器。现在,我添加到 arrayList 的每第三个项目都会给我一个 ConcurrentModificationException
。问题出在哪里?
private ArrayList<Marker> mMarkers
它在 onCreate
中实例化
这里我有一个关于我的 onCreateView
的 ListView
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
final Events event = mEventsParseQueryAdapter.getItem(position);
GoogleMap googleMap = mSupportMapFragment.getMap();
if (mMarkers.isEmpty()) {
mMarkers.add(googleMap.addMarker(new MarkerOptions()
.position(getLatLngFromGeoPoint(event.getLocation()))));
} else {
Iterator<Marker> markerIterator = mMarkers.iterator();
//noinspection WhileLoopReplaceableByForEach
while (markerIterator.hasNext()) {
Marker marker = markerIterator.next();
if (marker.getPosition().equals(getLatLngFromGeoPoint(event.getLocation()))) {
return false;
} else {
mMarkers.add(googleMap.addMarker(new MarkerOptions()
.position(getLatLngFromGeoPoint(event.getLocation()))));
}
}
}
return true;
}
});
这是我在点击监听器上的标记,它会弹出一个对话框,并有一个删除标记的选项
googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(final Marker marker) {
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(marker.getPosition(), CONSTANT.ZOOM_LEVEL));
AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
dialog.setNegativeButton(R.string.checkout, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mMarkers.remove(marker);
marker.remove();
}
}).setPositiveButton(R.string.frames, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.create().show();
return true;
}
});
最佳答案
无论使用 for-each 还是迭代器,都无法在迭代列表时修改列表。在异常页面上了解更多信息:http://docs.oracle.com/javase/7/docs/api/java/util/ConcurrentModificationException.html
关于java - 即使使用迭代器,添加到我的数组列表也会导致 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589110/