如何在选择新地点时移除地图上的当前Marker?
解决方案
问题出在你每次选中新地点时直接创建新Marker,但未移除旧Marker,且要注意**markerSelectedLoc必须是类成员变量**(不能是方法内的局部变量),否则无法保留之前Marker的引用。
解决步骤如下:
- 在你的Fragment/Activity类中声明
markerSelectedLoc作为成员变量 - 每次创建新Marker前,检查旧Marker是否存在,存在则移除
修改后的完整代码:
// 先在类中声明成员变量 private Marker markerSelectedLoc; // 修改Autocomplete的选中监听逻辑 autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(@NonNull Place place) { Log.i(TAG, "Place: " + place.getName() + ", " + place.getId()); // 核心:移除已存在的旧Marker if (markerSelectedLoc != null) { markerSelectedLoc.remove(); } LatLng selectedPlaceLatLng = place.getLatLng(); CameraPosition cameraPosition = new CameraPosition.Builder() .target(selectedPlaceLatLng) .zoom(20) .build(); mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); // 创建新Marker并赋值给成员变量,保留引用 markerSelectedLoc = mMap.addMarker(new MarkerOptions() .position(selectedPlaceLatLng) .flat(true)); markerSelectedLoc.setTag(0); } // 补上onError方法避免编译报错 @Override public void onError(@NonNull Status status) { Log.e(TAG, "地点选择失败: " + status.getStatusMessage()); } });
逻辑说明
- 类成员变量
markerSelectedLoc会持续保留上一次创建的Marker引用,不会每次方法调用都重置 - 每次进入选中回调时,先判断旧Marker是否存在,存在则调用
remove()从地图上删除 - 之后创建新Marker并覆盖成员变量的引用,确保下次选中时能拿到最新的Marker对象
内容的提问来源于stack exchange,提问作者Chichi
相关产品推荐
相关产品推荐

