2017-07-25 2 views
0

Ich habe ein paar Marker auf meiner Karte. Zu jedem von ihnen möchte ich ein kundenspezifisches infoWindow aufblasen.Hinzufügen eines anderen Layouts von infoWindow zum Marker

Das Problem, das ich habe, ist, dass das InfoWindow das gleiche für jeden ist. Ich habe ein paar Stack-Threads gelesen, aber ich habe nicht herausgefunden, wie ich es beheben kann.

Snippet, wo ich die Markierungen auf der Karte

 for (int i = 0; i<cityObjects.size(); i++){ 
      CityObject cObject = cityObjects.get(i); 
      Coordinates loc = cObject.getCoordinates(); 
      LatLng pos = new LatLng(loc.getLatitude(), loc.getLongitude()); 
      mMap.addMarker(new MarkerOptions().position(pos).title(cObject.getName())); 
      loadInfoWindow(cObject.getImgs().get(0), cObject.getName()); 

      builder.include(pos); 
     } 

Methode hinzufügen, die benutzerdefinierte aufzublasen infowindow

public void loadInfoWindow(final String url, final CharSequence title) { 
     mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 


      @Override 
      public View getInfoWindow(Marker arg0) { 
       arg0.getId(); 
       View v = getActivity().getLayoutInflater().inflate(R.layout.layout_info_window, null); 
       Button info = (Button) v.findViewById(R.id.infoButton); 
       info.setText(title); 
       BitmapLayout back = (BitmapLayout) v.findViewById(R.id.bitmapBackground); 
       Picasso.with(getContext()).load(url).into(back); 

       return v; 

      } 

      @Override 
      public View getInfoContents(Marker arg0) { 

       return null; 
      } 
     }); 

    } 

ich etwas über setInfoWindowAdapter ein Setter ist gelesen und daher außer Kraft setzt Infowindow jedes Mal, wenn die for-Schleife iteriert. Hat jemand eine gute Lösung, wie man die Markierungen erkennt, damit ich verschiedene Layouts aufblasen kann?

+1

Sie haben eine lange Länge für jeden Marker. Wenn Sie also auf Marker klicken, können Sie Ihr Layout generieren, indem Sie den Marker lat long vergleichen. –

+0

@chetanprajapat Großartig, es funktioniert! Vielen Dank – Viktor

+0

immer willkommen ... –

Antwort

0

Ich fühle mich ein bisschen dumm, nicht zu sehen, dies zu marker.for aber ich schaffte es, eine Lösung zu schreiben. Danke an @chetanprajapat, um mich auf den richtigen Weg zu bringen.

Da ich alle Informationen über den Marker (Ort, Titel) habe, kann ich das einfach in eine erstellte Klasse übergeben, die nach dem Titel sucht und dann das richtige Layout aufbläst.

Erstellt Klasse für das richtige Layout

public class CustomInfoWindowAdapter implements GoogleMap.InfoWindowAdapter{ 
      @Override 
      public View getInfoWindow(Marker arg0) { 

       for (CityObject cityObject : cityObjects){ 
        if (arg0.getTitle().equals(cityObject.getName())){ 
         View v = getActivity().getLayoutInflater().inflate(R.layout.layout_info_window, null); 
         Button info = (Button) v.findViewById(R.id.infoButton); 
         info.setText(cityObject.getName()); 
         BitmapLayout back = (BitmapLayout) v.findViewById(R.id.bitmapBackground); 
         Picasso.with(getContext()).load(cityObject.getImgs().get(0)).into(back); 
         return v; 
        } 
       } 
       return null; 
      } 

      @Override 
      public View getInfoContents(Marker arg0) { 

       return null; 
      } 
    } 

Aufblasen Und dann stelle ich einfach den Adapter an einen neuen Instance von CustomInfoWindowAdapter

mMap.setInfoWindowAdapter(new CustomInfoWindowAdapter()); 

Nochmals vielen Dank für die Hilfe @chetanprajapat.

0

Sie können marker.setTag() und marker.getTag() verwenden. Sie können einen Tag geben Beispiel

mMap.addMarker(new MarkerOptions().position(pos).title(cObject.getName())).setTag(1); 

mMap.addMarker(new MarkerOptions().position(pos).title(cObject.getName())).setTag(2); 

und dann in loadInfoWindow Methode

if((int)arg0.getTag==1) 
    { 
    //do something 
    } 
else{ 
//do something 
} 
Verwandte Themen