Связать объект с маркером (google map v2)
В моем приложении у меня есть некоторые объекты, которые отображаются на карте с помощью маркеров.
Проблема в том, что единственный способ, которым я нашел обращение с маркерными щелчками, -
googleMap.setOnMarkerClickListener(new ... {
@Override
public void onMarkerClick(Marker marker) {
// how to get the object associated to marker???
}
})
Другими словами, я получаю объект Marker, в то время как единственный интерфейс, который я позволяю мне устанавливать только MarkerOptions.
Любой способ связать маркер с объектом?
Ответы
Ответ 1
Вы можете связать произвольный объект с помощью Marker setTag()
Marker amarker = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World"));
amarker.setTag(new SomeData());
Чтобы получить данные, связанные с маркером, вы просто прочитали его, используя getTag(), а затем примените его к исходному типу.
SomeData adata = (SomeData) amarker.getTag();
Дополнительная информация
Ответ 2
Я считаю, что этот обратный вызов был не очень тщательно, хотя команда Android, но это то, что у нас есть.
Всякий раз, когда вы вызываете mMap.addMarker();
, он возвращает сгенерированный маркер. Затем вы можете использовать HashMap или другую структуру хранения данных, чтобы запомнить ее.
// Create the hash map on the beginning
WeakHashMap <Marker, Object> haspMap = new WeakHashMap <Marker, Object>();
// whenever adding your marker
Marker m = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World").icon(icon_bmp));
haspMap.put(m, your_data);
Ответ 3
Другим вариантом будет создание карты, чьими ключами являются marker.getId(), а значение - наш объект.
Таким образом, мы не будем хранить ссылку на маркер в памяти, и вам не придется беспокоиться о марке, собранной с мусором.
Здесь вы можете увидеть больше ответов.