在Google Maps v2中按ID获取地图标记

tyc*_*czj 17 android google-maps google-maps-android-api-2

基本上在向地图添加标记时,它会返回新标记,您可以像这样从中获取标记ID

Marker m = map.addMarker(new MarkerOptions()
                            .position(new LatLng(lat,lon)));
String id = m.getId();
Run Code Online (Sandbox Code Playgroud)

如果有很多标记并且你只想删除一个标记,有没有办法通过它的id获取标记?

Hir*_*tel 38

我这样做了:

初始化变量:

private GoogleMap mMap;
private HashMap<Marker, Integer> mHashMap = new HashMap<Marker, Integer>();
private ArrayList<MyCustomModelClass> myList = new ArrayList<MyCustomModelClass>();
Run Code Online (Sandbox Code Playgroud)

使用您的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);
}  
Run Code Online (Sandbox Code Playgroud)

标记单击侦听器上:

@Override
public boolean onMarkerClick(Marker marker) { 
    int pos = mHashMap.get(marker);
    Log.i("Position of arraylist", pos+"");
}
Run Code Online (Sandbox Code Playgroud)

希望这会帮助你.

  • 使用Marker作为关键是非常糟糕的主意. (4认同)
  • 很好的答案.这是要走的路. (3认同)

Rar*_*arw 20

问题是标记ID是自动生成的,不能单独用于跟踪标记.已经提出了许多策略来解决这个问题.一种方法是使用哈希映射来跟踪标记,然后使用您选择的键来查找特定标记并将其删除.另一个想法是重载其中一个标记字段,如代码段,然后自己添加一个键.例如,如果您正在创建一个新标记(使用Google示例代码),您可以将自己的密钥字符串放入代码段字段中

mMap.addMarker(new MarkerOptions()                           
.position(MELBOURNE)                           
.title("Melbourne")                           
.snippet(KEY + "Population: 4,137,400"));
Run Code Online (Sandbox Code Playgroud)

之后你可以使用它来检索该密钥

String s = marker.getSnippet()
String key = s.substring(start, end)
Run Code Online (Sandbox Code Playgroud)

然后使用条件删除特定标记(如果匹配).根据你需要采取一种方法,我比另一种方法更容易,更有效.


Ash*_*ohn 11

我知道,很晚了。但是现在,我们可以直接为标记添加唯一的TAG

Marker marker = mMap.addMarker(markerOptions);
marker.setTag("");
Run Code Online (Sandbox Code Playgroud)

关于地图标记 TAG 的 Google Developers 链接

  • 绝对更好,您可以将任何对象存储到标签中。 (2认同)