Je fais une application avec une carte Google sur elle, pour Android. J'ai beaucoup de marqueurs sur mon écran et je prépare un ballon personnalisable pour chaque marqueur lorsqu'il est cliqué. Cela signifie que j'ai des informations qui sont différentes selon le marqueur qui a été cliqué. P>
I Configurez le contenu de la vue du marqueur avec SettinfowindowAdapter, puis je remplace la méthode getinfocontents. P>
Le problème est que la méthode est la mise en œuvre générale du contenu de la fenêtre d'information, mais chaque marqueur montrera ses propres informations. Ainsi, autant que je sache, je dois en quelque sorte détecter sur GetInfocontents (marqueur de marqueur) que des marqueurs ont été cliqués, afin de charger de mes structures de données les informations nécessaires à présenter sur la fenêtre d'information. La question est la suivante: Des idées? P>
5 Réponses :
Essayez ce code:
@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()); } }
Vous n'êtes pas obligé de montrer le titre lorsque vous l'avez défini, vous pouvez donc l'utiliser et aussi longtemps que vous retournez une vue code> code> à partir de Selon comment et si vous gardez déjà des références à tous les marqueurs, il existe des alternatives, par ex. Si vous aviez Vous pouvez également conserver un Enfin, vous pouvez utiliser Extensions de cartes Android , qui ajoute des fonctions comme < code> marker.setdata (objet) code> et getinfocontents code> et non
et non Settext Code> sur n'importe quel sous-visView de ce
Vue code> avec la valeur du titre. P>
Liste
Liste
si (policemarkers.contains (marqueur)) {...} else {...} code>. p>
mapper
Votre MarkErLatedAmatamodel Modèle = AllMarkers.get (marqueur); code> et utilisez cette valeur pour différencier. p>
objet marqueur.getdata () code> Pour garder votre modèle proche de vos marqueurs et ne pas créer de choses comme
mapper
en réponse à:
La question est la suivante: comment identifier quelle entité le marqueur cliqué 'marqueur' représente? [...] Il y a aussi un marqueur.getid (), mais un tel identifiant est généré par l'API et je ne peux pas le contrôler p> blockQuote>
Vous pouvez le contrôler. Le marqueur est renvoyé par Addemarker (), vous pouvez donc obtenir son identifiant et le stocker. Voici le code: p>
xxx pré> ... p>
xxx pré> lorsque vous ajoutez le marqueur à la carte, stockez son identifiant sur la carte. Le conteneur p>
xxx pré> puis lorsque le marqueur est cliqué, vous pouvez récupérer l'ID de "MyObject" comme celui-ci P>
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { public void onInfoWindowClick(Marker marker) { int id = markers.get(marker.getId()); // Now id contains which Monument (or your preferred class) was clicked } });
Qu'est-ce que MyObject dans ce cas?
Bonjour @fahadsaleem, MyObject serait une classe que vous souhaitez corréler avec le marqueur. Dans mon cas, ce serait un Monument Code> Classe ou A
PointOnterest Code> Classe, vous savez ainsi lequel des monuments sur la carte Google a été cliqué. J'ai mis à jour l'échantillon de code, il est peut-être plus lisible maintenant
Il y a une meilleure option, c'est ce que Google suggère:
tag strong>: un objet code> associé au marqueur. Par exemple, l'objet
code> peut contenir des données sur ce que le marqueur représente. C'est plus facile que de stocker une carte distincte
code>. À titre d'autre exemple, vous pouvez associer une ID code> chaîne code> correspondant à l'ID d'un ensemble de données. Google Maps Android API Ni lit ni n'écrit cette propriété. P> blockQuote> source a> p>
afin que vous puissiez faire quelque chose comme ceci: p>
xxx pré> p>
map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { public void onInfoWindowClick(Marker marker) { double lat=marker.getPosition().latitude; double lng=marker.getPosition().longitude; } });