如何删除Android GoogleMap上的特定标记

时间:2016-11-05 08:35:14

标签: android google-maps

CODE:

private Marker mCurrentMarker;
private ArrayList<Marker> mMarkerArrayList;

@Override
    public void onMapReady(final GoogleMap googleMap) {
        mGoogleMap = googleMap;

        mMarkerArrayList = new ArrayList<>();
        googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng point) {

                MarkerOptions marker_onclick = new MarkerOptions().position(
                        new LatLng(point.latitude, point.longitude)).title(getString(R.string.now_your_location));
                if (mMarkerArrayList.size() > 0){
                    Marker marker_to_remove = mMarkerArrayList.get(0);
                    marker_to_remove.remove();
                }

                mCurrentMarker = mGoogleMap.addMarker(marker_onclick);

                mGoogleMap.addMarker(marker_onclick);
                mMarkerArrayList.add(mCurrentMarker);

            }
        });
    }

我希望当我点击地图时,会显示与点击位置相关的标记。和被删除之前的标记。因此,只有一个与显示点击位置相关的标记。

我已经知道mGoogleMap.clean();可以清理地图,也可以清除地图上的标记。

但我想删除特定的标记。 (因为,在我的应用程序中,有多种标记。例如,一个主标记显示用户所在的位置,并且公共汽车站标记显示公共汽车站的位置。)

所以我创建了ArrayList并尝试使用它。

但它没有用。

我认为当我点击地图时,addmarker();效果不错,但.remove();似乎无效。

错误在哪里?

如何仅删除特定标记?

我看了:How to remove the marker in Google map v2?

4 个答案:

答案 0 :(得分:16)

地图上添加标记时,可以将其存储到 HashMap 中,如下所示:

 HashMap<YourUniqueKey,Marker> hashMapMarker = new HashMap<>();
 Marker marker = googleMap.addMarker(markerOptions);
 hashMapMarker.put(YourUniqueKey,marker);

当您要删除特定标记时,只需通过 YourUniqueKey 获取该标记的Maker,如下所示:

Marker marker = hashMapMarker.get(YourUniqueKey);
marker.remove();
hashMapMarker.remove(YourUniqueKey);

答案 1 :(得分:2)

使用 setOnMarkerClickListener 来执行此操作!

代码如下:

mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {

        marker.remove();
        return true;
    }
});

点击“标记”后,您可以将其删除。

答案 2 :(得分:1)

我检查了您的代码并看到了错误。您不是要从arrayList中删除标记。

val markerArrayList = ArrayList<Marker>()

    // set map click listener
    googleMap?.setOnMapClickListener {

        if (markerArrayList.size > 0) {
            val markerToRemove = markerArrayList.get(0)

            // remove the maker from list
            markerArrayList.remove(markerToRemove)

            // remove the marker from the map
            markerToRemove.remove()
        }

        // Marker options
        val markerOptions = MarkerOptions().position(it).draggable(true)

        // adds marker to the clicked point
        val currentMarker = googleMap.addMarker(markerOptions)

        // Add current marker to array list
        markerArrayList.add(currentMarker)

        // Set default icon
        currentMarker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))

        // get the location of the clicked point
        val clickedPointLatitude = it.latitude
        mClickedPointLongitude = it.longitude
    }

答案 3 :(得分:1)

此代码在Kotlin中,但是可以正常使用,并且非常易于使用。 首先创建一个全局标记数组列表

val arrayMarker: MutableList<Marker> = ArrayList()

然后,每次您以这种方式在地图上放置新标记时,我们都会填充此数组:

val mark1 = mMap.addMarker(MarkerOptions().position(latLng))
arrayMarker.add(mark1)

好,这时您在地图中有标记,参考已保存在数组中。但是现在要检索此信息,我们将需要创建此函数来访问数据。

private fun Marker(get: Marker, position: Int): Marker {

    return arrayMarker.get(position)

}

最后,我们将从数组中检索数据并使代码工作。在此示例中,我删除了所有这样的标记:

val cont=0
    while (cont<arrayMarker.size){
        arrayMarker.get(cont).remove() //or isVisible=false if you just want to hide.
        cont++
    }

如果要删除特定标记,只需比较要删除的标记(可以通过onMarkClick完成)并与数组比较:

if (clickerMark == arrayMarker.get(position)) { do code here.

希望有帮助。