Добавление настраиваемого свойства в маркер (Google Maps Android API V2)

17

При использовании Google Map API V3 я могу добавить настраиваемое свойство следующим образом:

var marker = new google.maps.Marker({
  position: userLocation,
  map: myGoogleMap,
  animation: google.maps.Animation.DROP,
  icon: avatar,
  title: userName,
  customProperty1: bla,
  customProperty2: bla,
  customProperty3: bla,
  ...

});

Мне интересно, могу ли я сделать то же самое для API V2 Android, причина, по которой я хочу это сделать, заключается в том, что каждое информационное окно каждого маркера должно знать некоторую информацию этого маркера. И я пытаюсь достичь этого в функции render ниже:

private void render(Marker marker, View view) {
        int badge = R.drawable.android_face;

        if (marker.customProperty)
        //here I need to know this property to decide which image to use        
                         badge = R.drawable.bla;

        ((ImageView) view.findViewById(R.id.badge))
                    .setImageResource(badge);

}
    
задан Arch1tect 08.06.2013 в 09:20
источник

1 ответ

41

Вы не можете напрямую продлить Marker , потому что это последний класс, но у вас есть несколько вариантов:

0) . С Google Maps Android API версии 9.4.0 вы можете использовать Marker::getTag и Marker::setTag . Это наиболее вероятно предпочтительный вариант.

1) Создайте карту, чтобы сохранить всю дополнительную информацию:

private Map<Marker, MyData> allMarkersMap = new HashMap<Marker, MyData>();

При создании маркера добавьте его на эту карту со своими данными:

Marker marker = map.addMarker(...);
allMarkersMap.put(marker, myDataObj);

Позже в вашей функции render :

MyData myDataObj = allMarkersMap.get(marker);
if (myDataObj.customProp) { ...

2) . Другим способом было бы использовать Marker.snippet для хранения всей информации в виде String , а затем ее синтаксического анализа, но это довольно уродливое и непоколебимое решение.

3) Переключитесь с простого API Google Android версии v2 на расширения Android-карт .

Это очень похоже на пункт 1, но вы можете напрямую сохранить MyData в маркер, используя

marker.setData(myDataObj);

и позже:

MyData myDataObj = (MyData) marker.getData();
    
ответ дан MaciejGórski 08.06.2013 в 15:39
источник