6

カスタム クラスの ArrayList があります。リストには約 10 個のオブジェクトがあり、それぞれにタイトル、スニペット、LatLng などの詳細が含まれています。getTitle、getSnippet、getLatLng などのカスタム クラス関数を使用して、10 個すべてをマップに正常に追加しました。

ここで、(マーカーの) 情報ウィンドウをクリックしたときに、カスタム クラスのどのオブジェクトがそのマーカーに対応しているかをどうにかして知りたいと考えています。

たとえば、マクドナルドのマーケットをクリックした場合、そのマーカーが ArrayList のどのアイテムに属しているかを知りたいとします。

MarkerOptions を見てきましたが、関連するカスタム オブジェクトを識別するために使用できるものは何もないようです。

質問がわかりにくい場合は、簡単に説明します。

ArrayList<CustomObj> objects = blah
map.addMarker(new MarkerOptions().position(new LatLng(
                            Double.parseDouble(result.get(i).getCompanyLatLng()
                                    .split(",")[0]), Double.parseDouble(result
                                    .get(i).getCompanyLatLng().split(",")[1])))
                                    .title(result.get(i).getCompanyName())
                                    .snippet(result.get(i).getCompanyType())
                                    .icon(BitmapDescriptorFactory
                                            .fromResource(R.drawable.pin)));

これをクリックすると、次のページに進みます。次のページでは、クリックされたオブジェクトを知る必要があります。これにより、他の詳細をそのページに送信できます (たとえば、読み込む必要がある画像の URL など)。

一意の整数または任意の識別子をマーカーに追加するにはどうすればよいですか?

4

5 に答える 5

6

1 つの正しい方法は、Map<Marker, CustomObj>すべてのマーカーを格納する which を使用することです。

Marker marker = map.addMarker(...);
map.put(marker, result.get(i));

とでonInfoWindowClick

CustomObj obj = map.get(marker);

もう 1 つの試みは、Android Maps Extensionsを使用することです。これは にメソッドを追加getDataします。これにより、マーカーを作成した後にオブジェクトを割り当て、任意のコールバックで取得できます。setDataMarkerCustomObj

于 2013-05-23T19:28:33.990 に答える
1

次のリンクの議論によると、Marker.equals と Marker.hashCode が機能しないことがあります。たとえば、マップがパンまたはズームされたとき、または再起動/再開されたときです。

タグ/識別子をマーカーに追加

したがって、マーカーの ID は、HashMap のマーカー自体よりも優れたキーです。

Map<String, MyObject> markerMap = new HashMap<String, MyObject>();
Marker marker = map.addMarker(...);
MyObject myObject = new MyObject();
markerMap.put(marker.getId(), myObject);
于 2014-08-01T14:56:01.893 に答える