检查地图上的标记是不是已被删除 - Android [重复]
Posted
技术标签:
【中文标题】检查地图上的标记是不是已被删除 - Android [重复]【英文标题】:Check if Marker on Map has been removed - Android [duplicate]检查地图上的标记是否已被删除 - Android [重复] 【发布时间】:2020-06-22 11:46:17 【问题描述】:我如何从我的 Marker 对象中知道它是否已从 Google 地图中删除。我不感兴趣的是显示/隐藏。我对“删除()”感兴趣。即使在marker.remove()
之后,isVisible
也适用于该标记。那我怎么知道呢?
有人要求提供示例代码来重现。这里是:
override fun onMapReady(googleMap: GoogleMap)
this.googleMap = googleMap
val markerOptions = MarkerOptions()
markerOptions.position(LatLng(31.520959,74.352154))
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.curr_loc_grey))
val marker = googleMap.addMarker(markerOptions)
/........../
marker.remove()
我正在使用
api 'com.google.maps:google-maps-services:0.10.2'
我在调试的时候,看到marker.isVisible
添加的时候是true
,在remove()
之后一直是true
。是bug吗?
【问题讨论】:
这不可能。 @MrUpsidown 什么不可能是真的?可见吗?嗯,它是。你验证了吗? 验证?什么?您必须提供 minimal reproducible example 以便对其进行验证。根据文档,您的陈述不可能是真的。出于同样的原因,您有 2 票赞成票,并且到目前为止尚未更新您的问题。 @MrUpsidown 文档在哪里?它是简单的marker.remove()。我也为你添加并测试了代码。看看public void remove ()
从地图中删除此标记。删除标记后,其所有方法的行为都未定义。
【参考方案1】:
无论如何,您可以在将标记添加到地图的同时将其添加到 HashSet:
...
HashSet<Makrer> markersOnMap = new HashSet<>();
...
...
// when add marker to map
Marker marker = googleMap.addMarker(markerOptions);
markersOnMap.add(marker);
...
...
// when remove
markersOnMap.remove(marker);
marker.remove();
...
...
// when check is marker on map
if (markersOnMap.contains(marker))
// marker is on map
else
// marker removed
当然,这只是方法描述,不是最终代码。
更新:
您可以创建基于MapView/MapFragment
的自定义组件并继承HashSet
交互。类似的东西:
public class MarkesrMapView extends MapView implements OnMapReadyCallback
private OnMapReadyCallback mMapReadyCallback;
private GoogleMap mGoogleMap;
private HashSet<Makrer> mMarkersOnMap;
public MarkersMapView(@NonNull Context context)
super(context);
init();
public MarkersMapView(@NonNull Context context, @Nullable AttributeSet attrs)
super(context, attrs);
init();
public MarkersMapView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
init();
public MarkersMapView(@NonNull Context context, @Nullable GoogleMapOptions options)
super(context, options);
init();
private void init()
mMarkersOnMap = new HashSet<>();
@Override
public void getMapAsync(OnMapReadyCallback callback)
mMapReadyCallback = callback;
super.getMapAsync(this);
@Override
public void onMapReady(GoogleMap googleMap)
mGoogleMap = googleMap;
if (mMapReadyCallback != null)
mMapReadyCallback.onMapReady(googleMap);
public Marker addMarker(MarkerOptions markerOptions)
Marker marker = mGoogleMap.addMarker(markerOptions);
mMarkersOnMap.add(marker);
return marker;
public void removeMarker(Marker marker)
if (marker == null) return;
mMarkersOnMap.remove(marker);
marker.remove();
public boolean isOnMap(Marker marker)
if (marker == null) return false;
return mMarkersOnMap.contains(marker);
并像这样使用它:
...
private markersMapView mMapView;
...
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Bundle mapViewBundle = null;
if (savedInstanceState != null)
mapViewBundle = savedInstanceState.getBundle(MAP_VIEW_BUNDLE_KEY);
mMapView = (MarkersMapView) findViewById(R.id.mapview);
mMapView.onCreate(mapViewBundle);
mMapView.getMapAsync(new OnMapReadyCallback()
@Override
public void onMapReady(GoogleMap googleMap)
mGoogleMap = googleMap;
mMapView.addMarker(new MarkerOptions().position(...).title("Marker"));
);
...
if (mMapView.isOnMap(myMarker))
...
.isOnMap()
可以是非常简单的调用(尤其是在没有其他方法的情况下)。
【讨论】:
不适合我。需要进行一些简单的调用来检查。以上是关于检查地图上的标记是不是已被删除 - Android [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android Google Map如何检查用户是不是在标记矩形区域
如何在 Android 上的 Google 地图上的标记旁边显示标签?
在我的屏幕上显示给我的区域中的android上的地图中显示标记