I\'m adding dynamically a non-fixed amount of markers in a map, which each of them are related to one instance of my POCO class.
I need to link them so when the user
I know this post is old, but if you are using the prefab map Activity in Android studio
In the set up map
private void setUpMap() {
Map<String,someObject>markerInfoList = new HashMap<String,someObject>();
// get the marker Id as String
String id = mMap.addMarker(new MarkerOptions().position(new LatLng(/*set Latitude*/, /*setLongitude*/).title("Marker")).getId();
//add the marker ID to Map this way you are not holding on to GoogleMap object
markerInfoList.put(id,mapppedHouses.get(i));
}
Then in the :
private void setUpMapIfNeeded() {
///...
if (mMap != null) {
//if a marker is clicked
mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
someObject = markerInfoList.get(marker.getId());
}
});
}
}
I suggest using a HashMap or something similar. As you iterate over your list of objects and create markers for them, also add the Marker to a list, using the ID of the object as the key, and the marker as the value:
private HashMap<Integer, Marker> markerMap = new HashMap<Integer, Marker>();
...
for(MarkerObject obj : this.markerObjects)
{
//If the marker isn't already being displayed
if(!markerMap.containsKey(obj.getId()))
{
//Add the Marker to the Map and keep track of it
this.markerMap.put(obj.getId(), this.mMap.addMarker(getMarkerForObject(obj)));
}
}
Then you can use a OnInfoWindowClickListener to find the object id of the tapped marker in your Map and do something with the corresponding data, like open a new activity with details.