web-dev-qa-db-ja.com

オブジェクトをマーカーに関連付ける(Googleマップv2)

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

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

言い換えると、MarkerOptionsのみを設定できる唯一のインターフェイスであるMarkerオブジェクトを取得します。

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

31
leshka

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

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

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

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

詳細

31

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);
54
Budius

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

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

ここでは その他の回答 を確認できます。

8
Sanete