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



我正在开发一款安卓应用程序,谷歌地图上有不同类别位置的标记。例如,收集当前位置附近要访问的地方的标记,以及收集迄今为止访问过的地方的标志。

我发现地图上的所有标记都可以使用由监听器设置

GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)

然而,我有一个标记的集合

ArrayList<Marker> markerList1 
ArrayList<Marker> markerList2

并且我想在标记List1中用一个Listener设置标记,在标记List2中用另一个侦听器设置标记。请帮我找到最好的方法。

如果你只有两个这样的列表,一个直接的方法是进行

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

内部单击MarkerClick。

然而,contains是一种线性搜索,因此,如果单个列表中的标记数量很大,并且您有两个以上的类别,或者类别数量可能在未来发生变化,我建议切换到单个Map,例如

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);

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

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

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

相关内容

  • 没有找到相关文章

最新更新