J'ai une arrayliste d'une classe personnalisée. Il y a environ 10 objets dans la liste, chacun avec des détails tels que le titre, l'extrait, latlng. J'ai ajouté avec succès tous les 10 à une carte en utilisant mes fonctions de classe personnalisées telles que gettitle, getsnippet, getLatlng, etc.
maintenant, lorsque je clique sur la fenêtre d'information (du marqueur), je veux pouvoir savoir quel objet de ma classe personnalisée fait que ce marqueur correspond à. p>
Par exemple, si je clique sur le marché de McDonald, je souhaite pouvoir savoir quel article de mon arraylist a fait appartenir ce marqueur. P> < P> Je regarde les marqueurs et il ne semble pas y avoir rien de là que je peux utiliser pour identifier l'objet personnalisé pertinent avec. P>
Si la question est trop confuse, laissez-moi faire Il est simple: p> maintenant, lorsque cela se clique, je passe à la page suivante. La page suivante doit savoir quel objet a été cliqué pour que je puisse envoyer les autres détails à cette page (par exemple, les URL d'image qui doivent être chargées, etc.). P> Comment puis-je ajouter un entier unique ou un identifiant unique à mon marqueur? p> p>
5 Réponses :
J'ai utilisé le texte du snippet pour enregistrer un identifiant unique. Si vous avez besoin de l'extrait, il sera pour la pop up et là, vous pouvez simplement créer votre propre (en trouvant l'objet à partir de l'identifiant) afin que vous ne manquiez pas cela, mais vous manquerez certainement un identifiant unique pour identifier les objets.
Pour trouver le bon objet, je vois juste à travers eux: p>
Mais j'ai des informations dans les extraits .. Informations utiles à afficher
@Asim vous pouvez obtenir cette information de l'objet aussi bien? Puis prenez-le de là. Vous n'avez besoin que d'informations lorsque vous l'affichez.
Je pense qu'utiliser la latitude et la longitude, cela pourrait être fait
private int getArrayListPosition(LatLng pos) { for (int i = 0; i < result.size(); i++) { if (pos.latitude == result.get(i).getCompanyLatLng().split(",")[0]) { if (pos.longitude == result.get(i).getCompanyLatLng() .split(",")[1]) return i; } } return 0; }
C'est une bonne idée. Je vais essayer d'essayer de marquer votre réponse correcte si cela fonctionne bien.
Mais si vous avez 2 marqueurs, le même endroit où vous avez vissé. Ce n'est certainement pas la meilleure option comparée à l'utilisation de titres ou d'un extrait.
@Warpzit: Oui tu as raison. Mais si vous ajoutez 2 marqueurs ou plus sur le même lettlng, alors quel est le but. Les marqueurs sont utilisés pour afficher un point sur la carte. Donc, une même lettlng pointera vers la même position et je pense que les données de ce point seront identiques pour tous les marqueurs.
Une manière correcte consiste à utiliser et dans un autre essai utilise Cartes Android Extensions , qui ajoutez mappe
Oninfowindowclick code>: < / p>
getdata code> et
setData code> méthode sur code> marqueur code>, vous pouvez donc affecter votre
CustomObj code> objet Après avoir créé un marqueur et le récupérer dans n'importe quel rappel. p> p>
J'ai fini par utiliser des extensions de cartes. Je souhaite que Google corrige cela.
@Asim je ne pense pas que ce ne soit pas quelque chose qui nécessite une solution. Si de telles fonctions ( getdata code> et
setingdata code>) étaient à l'intérieur de la bibliothèque d'origine, tous vos objets devraient être
contrattables indicatif> et cela prendrait du temps supplémentaire pour Envoyez-les via IPC à Google Play Services. Utilisation de
Carte CODE> est une bonne solution de contournement et des extensions de cartes Android rendent cette solution de contournement plus convinie.
Selon la discussion sur le lien suivant, Marker.equals et Marker.HashCode ne fonctionnent pas parfois. Par exemple, lorsque la carte est harcelée ou zoomée, ou est redémarré / repris.
Ajouter une balise / identifiant aux marqueurs p>
L'ID du marqueur est donc une meilleure clé que le marqueur lui-même pour un hashmap. p>
Map<String, MyObject> markerMap = new HashMap<String, MyObject>(); Marker marker = map.addMarker(...); MyObject myObject = new MyObject(); markerMap.put(marker.getId(), myObject);
J'ai 4 ans de retard pour répondre, mais j'ai vraiment émerveillé pourquoi personne n'a parlé de marqueur.settag code>
et marqueur.gettag code>
méthode.
Comme écrit dans Google API Docs, P>
Ceci est plus facile que de stocker une carte
distincte
code> p> blockQuote> Ils ont introduisent
Setg code> et
getTag code> pour éviter l'utilisation de
mappe <...> code>. Vous pouvez l'utiliser comme suivant suivant. P>
Marker marker = map.addMarker(...); marker.setTag(result.get(i)); //Store your marker information here. //To fetch your object... map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { CustomObj obj = (CustomObj)marker.getTag(); //Your click handle event // Pass the obj to another activity and you are done return false; } });
mmap.settonMarkerClickLicklistener (New OnmarkerClickListener () {@override public boolean onmarkerclick (marqueur arg0) {if (arg0.getitter (). Equals ("Titre du marqueur 1")) toast.maketext (MainAlacit.Ce, arg0.getitle (), 1000) .Show (); retour vrai;}}); Vous pouvez utiliser un auditeur de marqueur pour vérifier et utiliser le titre à comparer pour savoir quel marqueur a été cliqué.
:) Les titres ne sont pas toujours uniques dans mon cas et ne peuvent donc pas être utilisés à cette fin.
Vous pouvez utiliser getid () dans ce cas.