我有一个片段:
当用户点击"地点"按钮,应用程序存储一个带有标记引用的hashmap,并将对象放在WeakHashMap中。当用户点击"删除地点"应用程序遍历调用marker.remove()的地图键。
完全渲染地图后,标记会被正确删除,但是,如果在渲染地图时按下按钮,则不会删除标记。
任何人都遇到过同样的问题? 怎么解决?
我无法使用map.clear(),因为它会删除所有标记,折线,叠加等。我只想删除以前存储的标记列表(用户的位置)一切。
答案 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。它解决了这个问题。