2017-10-04 1 views
0

J'ai créé Google Map avec marqueur multiple dynamiquement en utilisant la base de données, maintenant quelqu'un peut-il m'a suggéré comment créer un événement de clic chacun des marqueurs individuellement?Comment gérer le marqueur Google Map cliquez?

+0

Quels sont les événements que vous prévoyez d'effectuer sur un clic du marqueur? Sont-ils tous pareils avec de petits changements? Est-ce qu'ils aiment ouvrir une activité de votre application? –

+0

Je souhaite ouvrir une nouvelle activité sur chaque événement de clic de marqueur qui sera affiché sous forme de boîte de dialogue. –

Répondre

0

Vous pouvez faire comme ce

private Marker marker1; 
    marker1 = mMap.addMarker(new MarkerOptions() 
        .position(LatLng(-31.952854, 115.857342)) 
        .title("Title"); 
      marker1.setTag(0); 

    mMap.setOnMarkerClickListener(this); 

et la mise en œuvre de l'auditeur

@Override 
    public boolean onMarkerClick(final Marker marker) { 
     //marker.getTag() 
    } 
0

Utilisez ce pour les marqueurs multiples:

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

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 < yourMarkerListsize ; i++) { 
     marker[i] = mMap.addMarker(new MarkerOptions() 
     .position(new LatLng(list(i).getLat(), list(i).getLon()) 
     .anchor(0.5f, 0.5f) 
     .title(title) 
     .snippet(snippet) 
     .icon(yourIcon)); 
    } 

puis finalement

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

Hope it helps !!!

+0

Merci de me suggérer, mais j'ai besoin d'un code C# en utilisant Xamarin pas Java, c'est un code java. –

0

Si vous cherchez un code Xamarin pour le présent, voici comment vous le faites

GoogleMaps Gmap;            

GMap.MarkerClick += GMap_MarkerClick; 
GMap.InfoWindowClick += GMap_InfoWindowClick; 

private void GMap_MarkerClick(object sender, GoogleMap.MarkerClickEventArgs e) 
    { 
     Marker marker = e.Marker; 
     marker.ShowInfoWindow(); 
    } 
private void GMap_InfoWindowClick(object sender, GoogleMap.InfoWindowClickEventArgs e) 
    { 

    } 

c'est la façon dont vous gérez les deux marqueurs et informations marqueur événements fenêtre, cliquez dans Xamarin Android espoir que cela vous aide.

+0

Merci pour votre suggestion, mais votre code n'est qu'une valeur de marqueur, ce que j'ai déjà fait. en utilisant le code ci-dessous: Options MarkerOptions = new MarkerOptions(). SetPosition (latlng) .SetTitle (dt.Rows [i] ["rating"]. ToString() + ": Cliquer pour demander"); GMap.AddMarker (options); GMap = googleMap; –

+0

Donc vous voulez un code pour insérer plusieurs marqueurs je suppose!? @PrashantBhatt –

+0

Oui, il y a plusieurs marqueurs dans notre écran google map, et nous voulons un événement de clic de marqueur individuel pour tous les marqueurs. Les positions des marqueurs sont définies à partir de la base de données et elles sont affichées sur la carte en utilisant une boucle FOR. –

0

Je pense que l'approche ci-dessous peut vous aider:

Comme d'autres l'ont dit, vous pouvez définir un OnMarkerClickListener au marqueur, pour effectuer un événement sur un clic marqueur et ajouter une activité de lancement à l'aide d'une URL, reportez-vous here. Ainsi vous pouvez stocker l'url d'activité aussi dans DB. Lors de la création dynamique du marqueur, maintenez une carte dont la clé sera l'objet de la classe Marker et la valeur sera String l'URL.

donc, à l'intérieur méthode onMarkerClick():

@Override 
public boolean onMarkerClick(Marker marker) { 
    String activityUrl = markerURLMap.get(marker); 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(activityUrl)); 
    startActivity(intent); 
} 
0

Afin de joindre les URL uniques par clic marqueur, vous devez attacher un objet que vous marquez dans les Marker.Tag comme suit:

UrlObject url = new UrlObject() 
       { 
        Url = "enteryoururlhere" 
       }; 
marker.Tag = UrlObject; 

Ensuite, vous obtiendrez votre URL qui est unique à chaque marqueur en appelant ce qui suit:

public boolean onMarkerClick(Marker marker) { 
     UrlObject obj = marker.Tag; 
     String activityUrl = obj.Url; 
     Intent intent = new Intent(Intent.ACTION_VIEW, 
     Uri.parse(activityUrl)); 
     startActivity(intent); 
    } 

Votre classe UrlObject serait facile à installer:

class UrlObject : Java.Lang.Object 
    { 
      public string Url { get; set; } 
    } 

Edit: Vous serait une étiquette pour chaque marqueur dans votre boucle. De cette façon, lorsque chaque marqueur est créé, il est correctement étiqueté avec chaque URL.