我似乎无法弄清楚为什么我添加到Google地图中的标记没有被正确删除。
我根据通过回调返回给我的列表添加和删除标记。此列表每10秒更改一次,并返回一组包含预设键/ id的对象。只要在特定半径范围内,就可以每隔10秒返回一个具有相同精确字符串键/ id的对象。
我正在检查markerHashMap中的标记(表示Google Map上的标记)是否包含在新的markersCurrentHashMap中。如果markersCurrentHashMap中不存在该ID(因为该对象超出范围/半径),我将从Google Map中删除条目Marker,然后我从HashMap中删除该条目。
为什么我的Marker没有被正确删除,即使从markersHashMap中正确删除了Key / Value对?
这一行似乎是问题.. markersHashMap.get(key).remove();
以下是根据此返回列表添加/删除特定标记的方法。
private void updateMapMarkers(List<AnimateCarObj> carAnimateCarList) {
animateCarObjMap.clear();
markersCurrentHashMap.clear();
//POPULATE CURRENT HASHMAP / ANIMATE CAR MAP
for (AnimateCarObj ao : carAnimateCarList) {
if (ao.isAnimating()) {
isAnimCacheCarList.add(ao);
}
addAnimCarObjToMap(ao);
addMarkerToCurrentHashMap(ao);
}
printAnimateCarMap();
printCurrentMarkerMap();
//REMOVE ALL MARKERS FROM MARKER MAP, THAT DO NOT EXIST IN THE CURRENT VIEWABLE LIST
//removeOldMarkers();
for (String key : markersHashMap.keySet()) {
if (!(markersCurrentHashMap.containsKey(key))) {
markersHashMap.get(key).remove();
markersHashMap.remove(key);
}
}
addNewMarkers();
printMarkerMap();
}
如何添加标记
public void addNewMarkers() {
for (String key : markersCurrentHashMap.keySet()) {
if(!markersHashMap.containsKey(key)){
addMarker(key);
}
}
}
添加创建标记,添加到hashmap
public void addMarker(String id) {
AnimateCarObj animateCarObj = animateCarObjMap.get(id);
Bitmap carIcon = IconUtils.loadIcon(getActivity(), "some_car_marker.png", 0,
(int) DisplayUtils.dp2pixel(getActivity(), 50), ScaleMode.BY_HEIGHT);
Marker marker = map.addMarker(new MarkerOptions().position(animateCarObj.getGps1())
.rotation((float) animateCarObj.getWs_CarInfoObj().getBearing())
.icon(BitmapDescriptorFactory.fromBitmap(carIcon))
.visible(true));
addMarkerToHashMap(id, marker);
}
将标记添加到hashmap
public void addMarkerToHashMap(String id, Marker marker) {
setUpMarkersHashMap();
markersHashMap.put(id, marker);
}
以下是HashMaps的初始化方式
public void setUpMarkersHashMap() {
if (animateCarObjMap == null) {
animateCarObjMap = new HashMap<String, AnimateCarObj>();
}
if (markersHashMap == null) {
markersHashMap = new HashMap<String, Marker>();
}
if (markersCurrentHashMap == null) {
markersCurrentHashMap = new HashMap<String, Marker>();
}
if (markersResultHashMap == null) {
markersResultHashMap = new HashMap<String, Marker>();
}
}