2017-06-21 3 views
1

Ich habe einige Markierungen in meiner Google Map-Aktivität, die einige Shop-Standorte darstellen. Ich muss Click-Ereignis für jeden Marker schreiben, damit ich die entsprechende Website für jeden Shop öffnen kann. Ich verwende den folgenden Code, um Markierungen hinzuzufügen.Mehrere Marker Klicken Sie auf Ereignis in Android-Karten

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; 

} 

Wenn ich versuche, klicken Zuhörer auf die Markierungen hinzuzufügen i nur Click-Ereignis auf die zuletzt hinzugefügten Marker hinzufügen konnte nicht hinzufügen können Zuhörer auf alle them.I klicken. Aber ich muss Click-Ereignis für jeden Marker in der Karte machen. Bitte hilf mir. Dies ist mein Code für Klickereignis.

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

Sie können für jeden Marker ein Klickereignis hinzufügen. Was ist dein Problem? – user1209216

+0

Ich weiß nicht, wie man Klickereignis für jeden Marker hinzufügt. Mit meinem aktuellen Code geben nur zuletzt hinzugefügte Marker eine Antwort auf den Klick. – Ankit

Antwort

1

verwenden zu entfernen:

Zuerst machen Sie Ihre App GoogleMap.OnMarkerClickListener implementieren dann einen Marker-Array erstellen:

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

dann in

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

dann schließlich

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

Hoffe es hilft !!!

+0

Danke. Es funktioniert – Ankit

1

In onMarkerClick (...), "if (marker.equals (MyMarker))" bedeutet, dass onMarkerClick tut nur etwas für MyMarker.
myMarker verweist auf den zuletzt erstellten Marker, da er immer überschrieben wird, wenn createMarker aufgerufen wird. So ist der Vorschlag "if (marker.equals (MyMarker))"

0

Das ist falsch:

public boolean onMarkerClick(final Marker marker) { 

    return true; 
} 

Und Variable gibt an, welche Marker geklickt wurde:

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

es sein sollte. Übrigens ist deine Frage ziemlich sinnlos, du könntest zuerst einen Haltepunkt setzen, wenn du siehst, dass du falsch liegst und die Antwort für alle Marker da ist.

Außerdem würde ich somthing wie das preffer:

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

Geben Sie jedem Marker eine OnClickListener

.setOnClickListener(getOnClickAction()); 

Und als ein OnClickListener, die Klicks behandelt.

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