从Android中的Google Map清除标记


83

我已经添加了有关片段活动的地图,并使用addMarker函数添加了几个标记,但是我能够删除所有标记,并收到有关标记列表的通知,

现在我想删除所有标记并添加新标记。

一种将所有标记保留在列表中并一一删除的方法(marker.remove())

有没有更好的办法清除所有标记。


2
有clear()方法
Marko Niciforovic13年

Answers:


203

如果您想清除“地图上的所有标记,叠加层和折线”,请在上使用clear()GoogleMap


1
在执行此操作之前,我应该对所有这些对象都调用remove()吗?我的意思是,如果我还有一个带有这些标记的ArrayList,我想我仍然对这些标记具有活动的引用,因此即使我清除了映射,它们也将保留在内存中。我是对的还是清除地图抹去了对标记的引用?
查理-布雷克

5
@ santirivera92:“在执行此操作之前,我应该对所有人都调用remove()吗?” -AFAIK,您不需要。“如果我还有一个带有这些标记的ArrayList,我想我仍然对这些标记有活跃的引用,因此即使我清除了地图,它们也会保留在内存中” –是的,但这是您的代码,而不是Google的代码。如果抓住Marker从地图对象分开,需要让那些去。clear()会从视觉上将它们移除。
CommonsWare 2013年

1
@ santirivera92:是的,应该。没有别的东西可以抓住他们了。
CommonsWare 2013年

8
另请注意,该clear()功能不会重置MarkerID。基本上,您不会m0再为新Marker添加的内容了。
2013年

2
@Prasad有没有办法再次获得m0?
Gokhan Arik

4

如果您不希望清除折线,则仅需要删除标记,请按照以下步骤操作。

首先创建一个新的标记数组,如下所示

List<Marker> AllMarkers = new ArrayList<Marker>();

然后,当您在Google地图上添加标记时,还将它们添加到标记数组(在此示例中为AllMarkers)

for(int i=0;i<places.length();i++){

                LatLng location = new LatLng(Lat,Long);
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(location);
                markerOptions.title("Your title");

                 Marker mLocationMarker = Map.addMarker(markerOptions); // add the marker to Map
                    AllMarkers.add(mLocationMarker); // add the marker to array

                }

然后最后调用下面的方法一次删除所有标记

 private void removeAllMarkers() {
        for (Marker mLocationMarker: AllMarkers) {
            mLocationMarker.remove();
        }
        AllMarkers.clear();

    }

从任何地方致电以删除所有标记

removeAllMarkers();

当我在寻找一种只删除地图标记而不清除折线的方法时,我找到了这种解决方案。希望这也会对您有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.