2013-05-11 7 views
9

Android用Googleマップを使ってアプリケーションを作成しています。私は自分の画面上に多くのマーカーを持っており、クリックされるとマーカーごとにカスタマイズ可能なバルーンを準備しています。これは、クリックされたマーカーによって異なる情報があることを意味します。Android用Googleマップv2でどのマーカーがクリックされたかを知るにはどうすればよいですか?

マーカーのビューの内容をsetInfoWindowAdapterで設定してから、getInfoContentsメソッドをオーバーライドします。

問題は次のとおりです。この方法は、情報ウィンドウのコンテンツの一般的な実装ですが、各マーカーには独自の情報が表示されます。だから私が理解する限り、私は何らかの形でgetInfoContents(Markerマーカー)でマーカーをクリックして、データ構造から情報ウィンドウに表示するのに必要な情報をロードする必要があります。質問は次のとおりです:クリックされたマーカー 'マーカー'がどのエンティティを表しているかを特定するにはどうすればよいですか?私は、情報ウィンドウを表示するためにトリガされたgetInfoContents上のオブジェクトMarkerを持つだけで、どのように表示するのが適切な情報であるかを検出できますか?私はmarker.getTitle()を使用して文字列のタイトルを比較していますが、これは私が望ましくない情報ウィンドウにタイトルを表示することを余儀なくされます。 marker.getId()もありますが、このIDはAPIによって生成され、制御できません。

アイデアはありますか?あなたは、あなたがそれを使用することができますし、限り、あなたは、任意のサブビューにgetInfoContentsからViewなくsetTextを返すように、それは、設定されている時にタイトルを表示する義務はありません

@Override 
    public void onInfoWindowClick(final Marker marker) 
    { 
     // TODO Auto-generated method stub 
     if (marker.getTitle().equalsIgnoreCase("Start")) { 
     Toast.makeText(showMaps.this, "You have click on start -->", 
       Toast.LENGTH_LONG).show(); 
     Log.e("marker.getPosition()-->", "" + marker.getPosition()); 
     } 
    } 

答えて

0

このコードを試してみてくださいタイトル値でViewを返しました。

どのようにして、すべてのマーカーを参照しているかによって、選択肢が異なります。 List<Marker> policeMarkersList<Marker> badGuysMarkersの場合は、条件付きif (policeMarkers.contains(marker)) { ... } else { ... }を使用できます。

Map<Marker, YourMarkerRelatedDataModel> allMarkersのままにしてYourMarkerRelatedDataModel model = allMarkers.get(marker);を実行し、その値を使用して区別することもできます。 とObject Marker.getData()のような機能を追加して、モデルをマーカーに近づけ、Map<Marker, Model>のようなものを作成しないようにすることができます。Android Maps Extensionsを使用できます。返信で

3

18

質問です:どのように私はクリックしたマーカー「マーカー」は何を表しているかのエンティティを識別しますか? [...] はmarker.getIdは()もありますが、そのようなIDは、APIによって生成され、私はあなたがそれを制御することができます

を、それを制御することはできません。マーカーはaddMarker()によって返されるので、IDを取得して保存することができます。コードは次のとおりです。

Map <String, Integer> mMarkers = new HashMap<String, Integer>(); 

...

MarkerOptions mo = new MarkerOptions() 
.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker)) 
.position(new LatLng(mLat, mLon)) 
.flat(true) 
.snippet("Click here for details") 
.rotation(0) 
.title(title); 

マーカーがクリックされたときに、コンテナ

Marker mkr = map.addMarker(mo); 
mMarkers.put(mkr.getId(), myObject.getId()); 

にそのIDを格納し、マップにマーカーを追加する場合次に、あなたがこの

のように「myObjectという」のIDを回復することができます
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { 
    public void onInfoWindowClick(Marker marker) { 
     int id = mMarkers.get(marker.getId()); 
     // Do stuff with the id       
    } 
}); 
+0

.. +1 – Pihu

0

は良いオプションがあり、これはGoogleが示唆するものである:

タグObjectマーカーに関連する。たとえば、Objectには、マーカーが表すものに関するデータを含めることができます。これは別のMap<Marker, Object>を保存するより簡単です。別の例として、データセットのIDに対応するIDをStringに関連付けることができます。 Google Maps Android APIはこのプロパティの読み取りも書き込みもしません。

Source

は、だから、このような何かを行うことができます。

それは私の場合で動作
for (ListItem it: mList) { 
    Marker mk = mMap.addMarker(new MarkerOptions().position(it.getLatLng()).title(it.getName()).snippet(it.getAddress())); 
    mk.setTag(it.getID()); 
} 

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
    @Override 
    public boolean onMarkerClick(Marker marker) { 
     Integer id = (Integer) marker.getTag(); 
     return false; 
    } 
}); 
関連する問題