2017-06-21 1 views
1

J'ai des marqueurs dans mon activité google map représentant des emplacements de magasins. Je dois écrire un événement click pour chaque marqueur afin que je puisse ouvrir le site correspondant pour chaque magasin. J'utilise le code suivant pour ajouter des marqueurs.Marqueur multiple Cliquez sur l'événement dans les cartes android

public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    for(int i = 0 ; i < shop.size() ; i++) { 

     createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city); 
    } 

    mMap.setOnMarkerClickListener(ShoppingPage.this); 


} 
protected Marker createMarker(double latitude, double longitude, String title, String snippet, int iconResID) { 
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 9f)); 

    myMarker = mMap.addMarker(new MarkerOptions() 
      .position(new LatLng(latitude, longitude)) 
      .anchor(0.5f, 0.5f) 
      .title(title) 
      .snippet(snippet) 
      .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_location_city_black_24dp))); 
    return myMarker; 

} 

Quand je suis en train d'ajouter un clic d'écoute aux marqueurs je ne peux pas ajouter cliquez auditeur à tous them.I pourrait n'ajouter un événement de clic au dernier marqueur ajouté. Mais j'ai besoin de faire un événement click pour chaque marqueur de la carte. Aidez-moi, s'il vous plaît. C'est mon code pour l'événement click.

public boolean onMarkerClick(final Marker marker) { 
    if (marker.equals(myMarker)) 
    { 
     //handle click here 
     Log.d("title",""+ marker.getTitle()); 
     Log.d("position",""+ marker.getPosition()); 
    } 
    return true; 
} 
+0

Vous pouvez ajouter un événement de clic pour chaque marqueur. Quel est ton problème? – user1209216

+0

Je ne sais pas comment ajouter un événement click pour chaque marqueur. avec mon code actuel dernier marqueur ajouté seulement donner une réponse au clic. – Ankit

Répondre

1

Utilisez ceci:

d'abord votre application pour mettre en œuvre GoogleMap.OnMarkerClickListener Ensuite, créez un tableau de marqueur:

Marker[] marker = new Marker[20]; //change length of array according to you 

puis à l'intérieur

onMapReady(){ 
    mMap.setOnMarkerClickListener(this); 
for(int i = 0 ; i < shop.size() ; i++) { 
     marker[i] = createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city); 
    } 

puis finalement

@Override 
    public boolean onMarkerClick(Marker marker) { 
    //you can get assests of the clicked marker 
    return false; 
} 

Espérons que ça aide !!!

+0

Merci. Ça marche – Ankit

1

En onMarkerClick (...), "si (marker.equals (myMarker))" signifie que onMarkerClick ne fait que rien pour myMarker.
myMarker référence le dernier marqueur créé, car il est remplacé chaque fois que createMarker est appelé. Donc, la suggestion est de supprimer "si (marker.equals (myMarker))"

0

Ceci est faux:

public boolean onMarkerClick(final Marker marker) { 
    if (marker.equals(myMarker)) 
    { 
     //handle click here 
     Log.d("title",""+ marker.getTitle()); 
     Log.d("position",""+ marker.getPosition()); 
    } 
    return true; 
} 

Il devrait être:

public boolean onMarkerClick(final Marker marker) { 

    return true; 
} 

et variable indique quel marqueur a été cliqué. BTW votre question est plutôt inutile, vous pourriez définir le point de rupture sur d'abord si vous vous trompez et la réponse est là pour tous les marqueurs.

Aussi, je preffer somthing comme ça:

googleMap.setOnMarkerClickListener(marker -> 
{ 
    /*Do what you need with clicked marker*/ 
    return true; 
}); 
0

donner à chaque marqueur un OnClickListener

.setOnClickListener(getOnClickAction()); 

Et qu'une OnClickListener qui gère les clics.

View.OnClickListener getOnClickAction(){ 
     return new View.OnClickListener(){ 
      public void onClick(View v){ 
       //Handle Click 
       v.getTitle(position); 
      } 
     }; 
    }