Maps API v2 with different marker actions

前端 未结 4 562
我在风中等你
我在风中等你 2020-12-24 14:37

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

相关标签:
4条回答
  • 2020-12-24 15:09

    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());.
       ...
    }
    
    0 讨论(0)
  • 2020-12-24 15:11

    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.

    0 讨论(0)
  • 2020-12-24 15:21

    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;
    }
    
    0 讨论(0)
  • 2020-12-24 15:23

    You can use the marker's getId method

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