Подтвердить что ты не робот

Связать объект с маркером (google map v2)

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

googleMap.setOnMarkerClickListener(new ... {
    @Override
    public void onMarkerClick(Marker marker) {
       // how to get the object associated to marker???
    }
})

Другими словами, я получаю объект Marker, в то время как единственный интерфейс, который я позволяю мне устанавливать только MarkerOptions.

Любой способ связать маркер с объектом?

4b9b3361

Ответ 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(), а значение - наш объект.

Таким образом, мы не будем хранить ссылку на маркер в памяти, и вам не придется беспокоиться о марке, собранной с мусором.

Здесь вы можете увидеть больше ответов.