31

私のアプリには、マーカーを使用して地図上に位置が表示されているオブジェクトがいくつかあります。問題は、マーカーのクリックを処理するために私が見つけた唯一の方法は

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

言い換えれば、私が持っている唯一のインターフェースがMarkerOptionsだけを設定することを可能にしている間に、私はMarkerオブジェクトを取得します。

マーカーをオブジェクトに関連付ける方法はありますか?

4

3 に答える 3

54

このコールバックは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);
于 2012-12-27T12:03:20.493 に答える
35

MarkersetTag()メソッドを使用して、任意のオブジェクトを関連付けることができます

Marker amarker = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World"));
amarker.setTag(new SomeData());

マーカーに関連付けられたデータを取得するには、getTag()を使用してデータを読み取り、元の型にキャストするだけです。

SomeData adata = (SomeData) amarker.getTag();

詳しくは

于 2016-08-24T11:51:21.800 に答える
8

もう1つのオプションは、キーがmarker.getId()で、値がオブジェクトであるマップを作成することです。

このようにして、マーカーへの参照をメモリに保持せず、ガベージコレクションされたマーカーについて心配する必要がありません。

ここであなたはより多くの答えを見ることができます。

于 2013-11-21T16:23:00.087 に答える