适用于Android的GoogleMaps v2:在呈现地图时无法删除标记

时间:2014-08-21 09:14:14

标签: android google-maps-markers google-maps-android-api-2

我有一个片段:

  • GoogleMap v2片段
  • A"地点"用于添加标记的按钮(用户的位置)
  • A"删除地点"按钮(删除用户生成的标记)
  • 其他标记(例如一般兴趣点)
  • 自定义图块叠加

当用户点击"地点"按钮,应用程序存储一个带有标记引用的hashmap,并将对象放在WeakHashMap中。当用户点击"删除地点"应用程序遍历调用marker.remove()的地图键。

完全渲染地图后,标记会被正确删除,但是,如果在渲染地图时按下按钮,则不会删除标记。

任何人都遇到过同样的问题? 怎么解决?

我无法使用map.clear(),因为它会删除所有标记,折线,叠加等。我只想删除以前存储的标记列表(用户的位置)一切。

3 个答案:

答案 0 :(得分:3)

您可以使用一些布尔值来检查地图是否已完成加载。如果没有延迟标记的移除,直到它。这是一个例子:

private boolean mLoadFinished, mDelayRemove;

public void removeMarkers() {
    for (Marker marker : markers) {
        marker.remove();
    }
}

@Override
public void onCreate(Bundle savedInstanceState) {
    ...

    Button button;
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!mLoadFinished) {
                mDelayRemove = true;
            } else {
                removeMarkers();
            }
        }
    });

    mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
        @Override
        public void onMapLoaded() {
            mLoadFinished = true;
            if (mDelayRemove) {
                mDelayRemove = false;
                removeMarkers();
            }
        }
    });

    ...
}

答案 1 :(得分:1)

GoogleMAp.clear()将删除您在地图上绘制的所有标记

答案 2 :(得分:1)

问题是存储Marker和Place对象之间关系的对象不应该是WeakHashMap而是HashMap。它解决了这个问题。