Как связать маркер Google Maps Android API v2 с объектом

Я динамически добавляю на карту нефиксированное количество маркеров, каждый из которых связан с одним экземпляром моего класса POCO.

Мне нужно связать их, чтобы, когда пользователь нажимает на один из маркеров, я показывал остальные данные внутри пользовательского InfoWindow.

Что ты посоветуешь?

PS: я добавляю новые маркеры каждый раз, когда пользователь перемещает или масштабирует карту, и я беспокоюсь о перегрузке приложения. Удалены ли невидимые маркеры?


person Juliano Nunes Silva Oliveira    schedule 14.01.2013    source источник


Ответы (2)


Я предлагаю использовать HashMap или что-то подобное. Когда вы перебираете свой список объектов и создаете для них маркеры, также добавляйте маркер в список, используя идентификатор объекта в качестве ключа и маркер в качестве значения:

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)));
     }
}

Затем вы можете использовать OnInfoWindowClickListener, чтобы найти идентификатор объекта затронутого маркера на вашей карте и сделать что-то с соответствующими данными, например открыть новое действие с подробностями.

person DiscDev    schedule 14.01.2013
comment
Привет, этот вопрос связан с другим (stackoverflow.com/questions/14318258/), на которые вы также ответили. Меня беспокоит, как контролировать количество элементов в HashMap, и я хотел бы удалить элементы, которые не находятся в видимой области. Что ты посоветуешь? - person Juliano Nunes Silva Oliveira; 14.01.2013
comment
Я предлагаю сделать что-то похожее на то, что я написал в этом сообщении в блоге: discgolfsoftware.wordpress.com/2012/12/06/ - person DiscDev; 14.01.2013
comment
Разве это не игнорирует предупреждение на страница документации MapFragment о хранении объектов GoogleMap? - person WeNeigh; 31.05.2013
comment
@WeNeigh: см. stackoverflow.com/questions/ 16899612/ - person skaffman; 03.07.2013

Я знаю, что этот пост устарел, но если вы используете сборную карту Activity в студии Android

В настроенной карте

  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));     
}

Затем в:

  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());
                }
            });
  }
 }
person Tiber    schedule 22.07.2015