11
votes

Comment savoir quel marqueur a été cliqué sur Google Maps V2 pour Android?

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é.

I Configurez le contenu de la vue du marqueur avec SettinfowindowAdapter, puis je remplace la méthode getinfocontents.

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: Comment identifier quelle entité le marqueur cliqué 'marqueur représente? Je veux dire, avoir juste le marqueur d'objet sur getinfocontents qui a été déclenché pour montrer la fenêtre d'information, comment puis-je détecter ce qui est les informations appropriées à afficher? Je pense que sur la comparaison du titre de chaîne à l'aide de Marker.GettiTle (), mais cela m'oblige à afficher un titre sur la fenêtre d'information que je ne veux pas. 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

Des idées?


0 commentaires

5 Réponses :


0
votes

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());
      }
    }


0 commentaires

3
votes

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 à partir de getinfocontents et non et non Settext sur n'importe quel sous-visView de ce Vue avec la valeur du titre.

Selon comment et si vous gardez déjà des références à tous les marqueurs, il existe des alternatives, par ex. Si vous aviez Liste policiers et Liste Badguysmarkers Vous pouvez utiliser un si (policemarkers.contains (marqueur)) {...} else {...} .

Vous pouvez également conserver un mapper AllMarkers et DO Votre MarkErLatedAmatamodel Modèle = AllMarkers.get (marqueur); et utilisez cette valeur pour différencier.

Enfin, vous pouvez utiliser Extensions de cartes Android , qui ajoute des fonctions comme < code> marker.setdata (objet) et objet marqueur.getdata () Pour garder votre modèle proche de vos marqueurs et ne pas créer de choses comme mapper .


0 commentaires

23
votes

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                         
    }
});


2 commentaires

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 Classe ou A PointOnterest 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



4
votes

Il y a une meilleure option, c'est ce que Google suggère:

tag : un objet associé au marqueur. Par exemple, l'objet peut contenir des données sur ce que le marqueur représente. C'est plus facile que de stocker une carte distincte . À titre d'autre exemple, vous pouvez associer une ID chaîne correspondant à l'ID d'un ensemble de données. Google Maps Android API Ni lit ni n'écrit cette propriété.

source

afin que vous puissiez faire quelque chose comme ceci: xxx


0 commentaires

-1
votes
  map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
                public void onInfoWindowClick(Marker marker) {

                    double lat=marker.getPosition().latitude;
                    double lng=marker.getPosition().longitude;


                }
            });

0 commentaires