【问题标题】:onDragStart returns a different markeronDragStart 返回一个不同的标记
【发布时间】:2025-12-11 18:35:02
【问题描述】:

我正在使用 google-map 的库开发一个 Android 应用程序。 主要问题是管理(纬度,经度)坐标和整数之间的映射。 所以在 Activity 内部,我有一个名为 dictHashMap<LatLng,Integer> 对象来完成这项工作。

我将dict 的内容呈现给将Marker 对象放在地图上的用户,当用户选择新标记时,我在标签中显示相关的整数。

一切正常,除了拖放功能。

GoogleMap.OnMarkerDragListener onMarkerDragListener = new   
GoogleMap.OnMarkerDragListener() {

        private int content;

        @Override
        public void onMarkerDragStart(Marker marker1) {
            content = dict.remove(marker1.getPosition()); // NULL
        }

        ...

        @Override
        public void onMarkerDragEnd(Marker marker2) {
            dict.put(marker2.getPosition(), content);
        }
    };

错误出现在注释为“NULL”的行上,其中选择用于拖动的标记marker1 的位置(LatLng 对象)不是dict 映射的键。

我的印象是,当用户选择一个标记进行拖动时,系统会删除这个标记并返回一个位置略有不同的新标记。

这似乎不真实......我该如何解决这个问题?

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

    问题不在于拖动侦听器返回的标记,而在于您使用 LatLng 作为 dict 的键而不是标记本身(或 markerID)。 文档不清楚,但我非常有信心 getPosition() 为您提供位置的副本,并且 remove 函数使用 '==' 方法而不是“equals”。 所以我的建议是使用整个标记作为 dict 键(这会更好,你可以随时检索位置),或者使用 markerID 作为 dict 的键(但这可以改变),通过使用:

    myMarker.getId()
    

    https://developers.google.com/android/reference/com/google/android/gms/maps/model/Marker#getId()

    【讨论】:

    • 10 秒内应用好解决方案!
    最近更新 更多