I\'m trying to port my application to the new Google Maps API v2, but i\'m having trouble when interacting with markers.
My context: I have a map showing buses and
Ok here is a solution which I decided to use and AFAIK should work for any situation:
private HashMap<String, MyModel> markers= new HashMap<String, MyModel>();
MyModel item = ...
MarkerOptions markerOptions = ...
markers.put(mMap.addMarker(markerOptions).getId(), item);
@Override
public void onInfoWindowClick(Marker marker) {
MyModel mapItem = (MyModel) markers.get(marker.getId());.
...
}
I have run into this problem as well. My solution was:
private Map<Marker, MyModel> markerMap = new HashMap<>();
private GoogleMap mMap;
private void doMarkers(){
MarkerOptions opt = new MarkerOptions();
//Fill out opt from MyModel
Marker marker = mMap.addMarker(opt);
markerMap.put(marker, myModel);
}
and then in the OnMarkerClickListener callback, pull your model out of the HashMap using the clicked marker. There is also a method Marker.getId() which for some reason returns a string. I don't understand why you can't specify an int id when you make the marker, or why you can't access the marker object before you add it to the map.
UPDATE: After almost 4 years Google have added a method Marker.setTag(Object tag)
to associate arbitrary data with a marker.
You can use the HashMarker like that. In this example y charge points in Arraylist and each points cointaints a new ArrayList with coordinates. And the idea is you get de point ID.
Create a HashMap
Markers = new HashMap();
Then you create a Marker and add to the map
final Marker marker = map.addMarker(new MarkerOptions().position(new LatLng(coordinates.get(j).getLat(),coordinates.get(j).getLon())).title(point.getName()));
Then you can save the point id with de marker value
Markers.put(marker, point.getId());
And final you can get the id value when you click the InfoWindow
public void onInfoWindowClick(Marker marker) {
final long id = Marcadores.get(marker);
Log.e("Real Marker ID", id+"");
}
OR
When you click the marker
public boolean onMarkerClick(Marker arg0) {
final long id = Marcadores.get(marker);
Log.e("Real Marker ID", id+"");
return false;
}
You can use the marker's getId
method