如何从Overlay中提取OverlayItem?

时间:2012-02-10 09:42:21

标签: android android-mapview itemizedoverlay overlayitem

我需要检查新创建的OverlayItem的数据是否已经存在于地图上已显示的OverlayItem列表中。我做了一个代码来检查OverlayItem的数据是否已经存在但是我遇到了错误。如何从叠加层中提取OverlayItem?

我目前的代码是这样的:

//where mapOverlays = mapView.getOverlays() and overlayItem is the newly created overlayItem
public boolean isExisting(List<Overlays> mapOverlays, OverlayItem overlayItem)
{
    ItemizedOverlay overlay;
    OverlayItem itemToCompare;

    for(int i = 0; i < mapOverlays.size(); i++)
    {
        overlay = (ItemizedOverlay)mapOverlays; //I am getting an error here: java.util.Collections$SynchronizedRandomAccessList (from e.getMessage()). The stack trace does not contain any specific exception but only the trace of the error pointing to this line.
        existingOverlayItem = overlay.getItem(i);

        if(itemToCompare.getPoint().equals(overlayItem.getPoint())
            && itemToCompare.getSnippet().equals(overlayItem.getSnippet())
            && itemToCompare.getTitle().equals(overlayItem.getTitle()))
            return true; //if all data are the same
    }

    return false;
}

3 个答案:

答案 0 :(得分:0)

我不知道MapOverlay,但您可能无法将List放入MapOverlay

答案 1 :(得分:0)

该代码看起来有点奇怪。 item toTare会在哪里?我无法在任何地方看到它。如果itemToCompare与overlayItem是同一个类,为什么不在类中重写equals并使用它而不是比较每个参数?

更好的是,在班级中覆盖等号将授予您访问权限:

mapOverlays.contains(overlayItem); 

因此,您的整个isExisting方法将被上面的调用替换。您可以查看有关equals如何工作的更多信息here

答案 2 :(得分:0)

感谢大家回答我的问题。我发现我的问题发生了,因为我将mapOverlays转换为错误的类。

此外,我不是从mapOverlays中提取OverlayItem(我无法找到),而是在addOverlay(OverlayItem overlayItem)中进行验证。我以前不能这样做因为我总是重新初始化我的itemizedOverlay的值。因此,我无法将新添加的OverlayItem与旧的OverlayItem进行比较,因为itemizedOverlay不再保留旧值。我所做的不是总是重新初始化itemizedOverlay,我只是总是清除mapOverlays,它等于mapView.getOverlays()。clear()。