Android-更改其他地图时删除标记

时间:2018-11-15 11:07:14

标签: android google-maps

我创建了一个在公园中显示不同轨道的应用。我创建了两个标记,分别代表曲目的开始和结束。我遇到一个问题,当我更改曲目时,仍显示前一曲目的标记。我尝试了map.clear(),但是删除了所有内容。我不想显示上一曲中的标记。

private void createMarker(double latitude, double longitude, String title) {
    map.addMarker(new MarkerOptions()
            .position(new LatLng(latitude, longitude))
            .title(title)
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)));
}

private void updateMapTrack() {
    switch (options.getTrack()) {
        case TRACK1:
            createMarker(-45.85696303760779, 170.5199563062967, "Start of track1.");
            createMarker(-45.85808344124618, 170.5247490755895, "End of track1.");
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(-45.856895, 170.518673), (float) 17.8));
            break;

        case TRACK2:
            createMarker(-45.85696303760779, 170.5199563062967, "Start of track2.");
            createMarker(-45.85808344124618, 170.5247490755895, "End of track2.");
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(-45.857144, 170.522713), (float) 16.32));
            break;

        case TRACK3:
            createMarker(-45.85714008365828, 170.5193834664067, "Start of track3.");
            createMarker(-45.85751258570694, 170.526808129631, "End of track3.");
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(-45.858164, 170.523111), (float) 16));
            break;
    }
}

1 个答案:

答案 0 :(得分:0)

您将必须保留对创建的标记对象的引用,然后调用

[Marker Reference].remove()方法将其从GoogleMap中删除。 例如:

像这样创建标记并保存引用:

Marker startTrackMarker = createMarker(-45.85696303760779, 170.5199563062967, "Start of track1.");

这就是您要删除的方式:

startTrackMarker.remove()

您的createMarker方法将如下更改:

private Marker createMarker(double latitude, double longitude, String title) {
        return map.addMarker(new MarkerOptions()
                .position(new LatLng(latitude, longitude))
                .title(title)
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)));
    }

注意:

如果您有多个标记,则需要一个数组来保存对市场的所有引用,如下所示:

ArrayList<Marker> markers = new ArrayList<>();

,然后删除这些标记,您将必须迭代数组并在每个标记对象上调用remove()。 (否则,这完全取决于您的逻辑)。