31

在我的应用程序中,我有一些使用标记在地图上显示其位置的对象。问题是我发现处理标记点击的唯一方法是

googleMap.setOnMarkerClickListener(new ... {
    @Override
    public void onMarkerClick(Marker marker) {
       // how to get the object associated to marker???
    }
})

换句话说,我得到了 Marker 对象,而我拥有的唯一接口允许我只设置 MarkerOptions。

有什么方法可以将标记与对象相关联?

4

3 回答 3

54

我认为这个回调虽然 Android 团队不是很彻底,但是,这就是我们所拥有的。

每当您调用mMap.addMarker();它时,它都会返回生成的标记。然后,您可以使用 HashMap 或其他一些数据持有者结构来记住它。

// Create the hash map on the beginning
WeakHashMap <Marker, Object> haspMap = new WeakHashMap <Marker, Object>();


// whenever adding your marker
Marker m = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World").icon(icon_bmp));
haspMap.put(m, your_data);
于 2012-12-27T12:03:20.493 回答
35

您可以使用MarkersetTag()方法关联任意对象

Marker amarker = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World"));
amarker.setTag(new SomeData());

要检索与标记关联的数据,您只需使用其getTag()读取它,然后将其转换为其原始类型。

SomeData adata = (SomeData) amarker.getTag();

更多信息

于 2016-08-24T11:51:21.800 回答
8

另一种选择是创建一个 Map,其键是 marker.getId(),值是我们的对象。

这样,我们就不会在内存中保留对 Marker 的引用,也不必担心垃圾收集的标记。

在这里你可以看到更多的答案

于 2013-11-21T16:23:00.087 回答