How to link Google Maps Android API v2 Marker to an object

后端 未结 2 1676
一整个雨季
一整个雨季 2021-01-07 09:13

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

相关标签:
2条回答
  • 2021-01-07 09:39

    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());
                    }
                });
      }
     }
    
    0 讨论(0)
  • 2021-01-07 09:49

    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.

    0 讨论(0)
提交回复
热议问题