0

特定のデータを含むカスタム ItemizedOverlay を検索しようとしています... MapView のすべてのオーバーレイを実行しようとすると、for ループで ConcurrentModificationException が発生し続けます。

誰かがこの問題の答えを知っていることを願っています...

コードは次のとおりです。

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    Log.d("Activityresult", "voor ok");
    if(resultCode == RESULT_OK){
        GeoPoint point = new GeoPoint(touchedPoint.getLatitudeE6(), touchedPoint.getLongitudeE6());
        Car car = data.getExtras().getParcelable("car");
        PinpointItem pinpoint = new PinpointItem(point, car, DropHostCarActivity.this);
        CustomPinpointOverlay custom = new CustomPinpointOverlay(d, DropHostCarActivity.this);
        custom.insertPinpoint(pinpoint);
        List<Overlay> mapOverlays = mapView.getOverlays();
        if (mapOverlays.size() > 1) {
            removeSameCar(mapOverlays,car);
        }
        overlayList.add(custom);
        mapView.invalidate();
    }
}

private void removeSameCar(List<Overlay> mapOverlays, Car car) {
    for(Overlay overlay: mapOverlays){
        if(overlay instanceof CustomPinpointOverlay && 
                ((CustomPinpointOverlay) overlay).getItem(0).getCar().getNumberPlate().equals(car.getNumberPlate())){
            overlayList.remove(overlay);
        }
    }

}
4

1 に答える 1

0

List 実装がサポートしている場合、反復中に Iterator のメソッド remove を使用してのみリストを変更できます。イテレータを明示的に使用する必要があります。

private void removeSameCar(List<Overlay> mapOverlays, Car car) {
    Iterator<Overlay> it = mapOverlays.iterator();
    while (it.hasNext()) {
        Overlay overlay = it.next();
        if(overlay instanceof CustomPinpointOverlay && 
                ((CustomPinpointOverlay) overlay).getItem(0).getCar().getNumberPlate().equals(car.getNumberPlate())){
            it.remove();
        }
    }
}
于 2012-05-10T21:43:18.403 に答える