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();
似乎无效。
错误在哪里?
如何仅删除特定标记?
答案 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.
希望有帮助。