如何从 google 地图中删除特定的多个标记而不是单个或所有标记
How to remove specific multiple marker from google map instead of single or all marker
我想从 Google 地图中删除多个特定标记,但我做不到。我已经知道 marker.remove();
和 mMap.clear();
但它们对我没有帮助。查看下面的代码,我是如何创建多个标记的。
private ArrayList<String> pup_latList01;
private ArrayList<String> pup_longList01;
private ArrayList<String> pup_nameList01;
for(int i = 0 ;i< pup_nameList01.size();i++)
{
LatLng puplatlang = new LatLng(Double.parseDouble(pup_latList01.get(i)),Double.parseDouble(pup_longList01.get(i)));
pupMarker = mMap.addMarker(new MarkerOptions().position(puplatlang).title(pup_nameList01.get(i)).draggable(true).icon(bitmapDescriptorFromVector(MapsActivity.this, R.drawable.bus_stop_small)));
}
我只想从 pupMarker
标记对象的创建中删除标记。
我还有从其他对象创建的其他标记。当我使用 pupMarker.remove();
时,它只会从上面的代码中删除最后创建的标记
mMap.clear();
从地图中删除所有标记。
在此代码中,pupMarker 始终是列表中的最后一个标记。因此,当您使用 pupMarker.remove();
时,它只会删除最后创建的标记。您可以制作一个包含所有这些标记的列表,然后获取您想要删除的标记。
编辑 1:
最好使用 HashMap 而不是 List 来保存对标记的引用。以后在Map里用key找会更方便
编辑 2:
评论中要求的示例:
private HashMap<Integer, Marker> hashMapMarker = new HashMap<>();
for(int i = 0 ;i< pup_nameList01.size();i++)
{
LatLng puplatlang = new LatLng(Double.parseDouble(pup_latList01.get(i)),Double.parseDouble(pup_longList01.get(i)));
Marker pupMarker = mMap.addMarker(new MarkerOptions().position(puplatlang).title(pup_nameList01.get(i)).draggable(true).icon(bitmapDescriptorFromVector(MapsActivity.this, R.drawable.bus_stop_small)));
hashMapMarker.put(i, pupMarker);
}
请注意,如果使用 Integer 作为键,最好使用 SparseArray 而不是 HashMap。
private void removeMarker(int position){
hashMapMarker.get(positon).remove();
hashMapMarker.remove(position);
}
当您使用 googleMap.addMarker(...) 创建标记时,您会收到一个代表它的标记对象。
也就是说,地图上每个标记的每个标记对象。
因此,例如,您可以在特定列表组中添加您喜欢的标记。
步骤:
- 创建一个List类型的列表,例如。
- 对于您在 googleMap.addMarker(...) 上收到的每个标记,将其添加到列表中。
- 要清除所有这些特定标记,请使用 for each 循环列表并使用 Marker.remove();方法。
- 使用 List.clear();
清除列表
我想从 Google 地图中删除多个特定标记,但我做不到。我已经知道 marker.remove();
和 mMap.clear();
但它们对我没有帮助。查看下面的代码,我是如何创建多个标记的。
private ArrayList<String> pup_latList01;
private ArrayList<String> pup_longList01;
private ArrayList<String> pup_nameList01;
for(int i = 0 ;i< pup_nameList01.size();i++)
{
LatLng puplatlang = new LatLng(Double.parseDouble(pup_latList01.get(i)),Double.parseDouble(pup_longList01.get(i)));
pupMarker = mMap.addMarker(new MarkerOptions().position(puplatlang).title(pup_nameList01.get(i)).draggable(true).icon(bitmapDescriptorFromVector(MapsActivity.this, R.drawable.bus_stop_small)));
}
我只想从 pupMarker
标记对象的创建中删除标记。
我还有从其他对象创建的其他标记。当我使用 pupMarker.remove();
时,它只会从上面的代码中删除最后创建的标记
mMap.clear();
从地图中删除所有标记。
在此代码中,pupMarker 始终是列表中的最后一个标记。因此,当您使用 pupMarker.remove();
时,它只会删除最后创建的标记。您可以制作一个包含所有这些标记的列表,然后获取您想要删除的标记。
编辑 1:
最好使用 HashMap 而不是 List 来保存对标记的引用。以后在Map里用key找会更方便
编辑 2:
评论中要求的示例:
private HashMap<Integer, Marker> hashMapMarker = new HashMap<>();
for(int i = 0 ;i< pup_nameList01.size();i++)
{
LatLng puplatlang = new LatLng(Double.parseDouble(pup_latList01.get(i)),Double.parseDouble(pup_longList01.get(i)));
Marker pupMarker = mMap.addMarker(new MarkerOptions().position(puplatlang).title(pup_nameList01.get(i)).draggable(true).icon(bitmapDescriptorFromVector(MapsActivity.this, R.drawable.bus_stop_small)));
hashMapMarker.put(i, pupMarker);
}
请注意,如果使用 Integer 作为键,最好使用 SparseArray 而不是 HashMap。
private void removeMarker(int position){
hashMapMarker.get(positon).remove();
hashMapMarker.remove(position);
}
当您使用 googleMap.addMarker(...) 创建标记时,您会收到一个代表它的标记对象。 也就是说,地图上每个标记的每个标记对象。
因此,例如,您可以在特定列表组中添加您喜欢的标记。
步骤:
- 创建一个List类型的列表,例如。
- 对于您在 googleMap.addMarker(...) 上收到的每个标记,将其添加到列表中。
- 要清除所有这些特定标记,请使用 for each 循环列表并使用 Marker.remove();方法。
- 使用 List.clear(); 清除列表