You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在选择新地点时移除地图上的当前Marker?

解决方案

问题出在你每次选中新地点时直接创建新Marker,但未移除旧Marker,且要注意**markerSelectedLoc必须是类成员变量**(不能是方法内的局部变量),否则无法保留之前Marker的引用。

解决步骤如下:

  1. 在你的Fragment/Activity类中声明markerSelectedLoc作为成员变量
  2. 每次创建新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:52:43