使用Google Maps API将侦听器设置为标记组

时间:2013-07-26 23:48:12

标签: google-maps-markers android-maps-v2

我正在开发一款Android应用,Google地图上有不同类别地点的标记。例如,为当前位置附近的访问地点收集标记以及到目前为止访问的地点的标记集合。

我发现可以使用

使用Listeners设置地图上的所有标记
GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)

但是,我有一系列标记

ArrayList<Marker> markerList1 
ArrayList<Marker> markerList2

我想在markerList1中使用一个Listener和markerList2中的标记与其他Listener设置标记。请帮助我找到最好的方法。

2 个答案:

答案 0 :(得分:1)

方法OnMarkerClickListener是为地图对象设置的,无法在标记或标记组级别设置。这意味着点击地图上的任何标记都会触发相同的public boolean onMarkerClick(final Marker marker)

现在要处理不同类型标记的点击,您需要在此函数中使用if else逻辑。您可以通过检查详细信息(如marker.getTitle() or marker.getSnippet())中的某些字符串匹配或通过检查包含标记的更多详细信息的hashmap或sqlite db条目来识别标记所属的组。

答案 1 :(得分:1)

如果您只有两个这样的列表,那么直接的方法就是

if (markerList1.contains(marker)) {
    doFirstAction(marker);
} else {
    doSecondAction(marker);
}

在onMarkerClick内部。

然而,包含是线性搜索,因此如果单个列表中的标记数量很大,并且您有两个以上的类别或类别的数量可能在将来发生变化,我建议改为切换到单个地图,例如

private Map<Marker, OnMarkerClickListener> allMarkers;

// in onCreate
OnMarkerClickListener firstActionListener = new ...
OnMarkerClickListener secondActionListener = new ...

Marker marker = ...
allMarkers.put(marker, firstActionListener);

// in global onMarkerClickListener
return allMarkers.get(marker).onMarkerClick(marker);

通过这种方式,您可以拥有单独的侦听器,代码是最佳的,并且遵循开放/封闭原则:如果添加新类别,则不会更改现有代码。