基本上在向地图添加标记时,它会返回新标记,您可以像这样从中获取标记ID
Marker m = map.addMarker(new MarkerOptions()
.position(new LatLng(lat,lon)));
String id = m.getId();
如果有很多标记并且你只想删除一个标记,有没有办法通过它的id获取标记?
问题是标记ID是自动生成的,不能单独用于跟踪标记。已经提出了许多策略来解决这个问题。一个是use a hash map to track markers,然后使用你选择的键找到一个特定的标记并将其删除。另一个想法是重载其中一个标记字段,如代码段,然后自己添加一个键。例如,如果您正在创建一个新标记(使用Google示例代码),您可以将自己的密钥字符串放入代码段字段中
mMap.addMarker(new MarkerOptions()
.position(MELBOURNE)
.title("Melbourne")
.snippet(KEY + "Population: 4,137,400"));
稍后您可以使用检索密钥
String s = marker.getSnippet()
String key = s.substring(start, end)
然后使用条件删除特定标记(如果匹配)。根据你需要采取一种方法,我比另一种方法更容易,更有效。
我这样做了:
初始化变量:
private GoogleMap mMap;
private HashMap<Marker, Integer> mHashMap = new HashMap<Marker, Integer>();
private ArrayList<MyCustomModelClass> myList = new ArrayList<MyCustomModelClass>();
使用您的arraylist在谷歌地图上添加标记:
for (int i = 0; i < myList.size(); i++) {
double latitude = myList.getLatitude();
double longitude = myList.getLongitude();
Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude))).title(myList.getTitle())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.location_icon));
mHashMap.put(marker, i);
}
在标记单击侦听器上:
@Override
public boolean onMarkerClick(Marker marker) {
int pos = mHashMap.get(marker);
Log.i("Position of arraylist", pos+"");
}
希望这会帮助你。
使用WeakHashMap<Integer,Marker>
来存储标记,因为这样我们就不会在内存中保留对Marker的引用,也不必担心垃圾收集标记。
其次建议的方法是使用带有ID和自定义数据的WeakHashMap。文档说标记对象可能会更改,因此请勿使用标记作为键。如果活动被杀死并恢复,但ID将保持不变。有时,如果标记对象发生变化,它也可能返回null。
WeakHashMap<Integer,Marker> obj = new WeakHashMap <Integer,Marker>();
希望它能帮助未来的观众......
我知道,它很晚。但现在,我们可以直接为标记添加一个独特的TAG。
Marker marker = mMap.addMarker(markerOptions);
marker.setTag("");
最好的方法是使用Map <int, Mark> dictionaryMark;
。
只需在每次绘制时将标记添加到字典中。