Maps API v2 mit verschiedenen Markeraktionen

Ich versuche, meine Anwendung auf die neue Google Maps API v2 zu portieren, aber ich habe Probleme bei der Interaktion mit Markern.

Mein Kontext: Ich habe eine Karte mit Bussen und Bussen. Mit der alten Bibliothek hatte ich meine eigene ItemizedOverlay für Bushaltestellen und eine andere für Busse. Jeder hatte einen anderen OnTapListener (eigentlich benutze ich eine externe Bibliothek, um Ballons zu zeigen), also wenn der User die Busmarkierung anpasst, passiert nichts, aber wenn er die Bushaltestelle markiert, wird eine Aktivität mit seinen Informationen geöffnet. Auch in meinem ItemizedOverlay habe ich jeden Marker mit seinem Bushaltesystem des Modells abgebildet.

  • Wie man Schriftart benutzerdefinierte Schriftart auf Spinner Text programmgesteuert?
  • Programmgesteuert ausblenden / deaktivieren Emoticons auf Android Soft-Tastatur
  • SDK-Optionen ist für Kindle Fire in Eclipse nicht verfügbar?
  • Wie kann ich ein Android-Gerät von Desktop-PC aus steuern?
  • Wie kann ich programmgesteuert überprüfen, ob die App im Debug-Modus läuft oder nicht?
  • So legen Sie ein großes Symbol für die GCM-Benachrichtigung fest
  • Jetzt mit der neuen API habe ich 2 Hauptprobleme:

    • Sie legen einen Listener mit setOnInfoWindowClickListener () oder setOnMarkerClickListener () Methoden Ihres GoogleMap-Objekts fest. Mit anderen Worten, man kann nur einen Hörer für die ganzen Karten setzen, also kann ich nicht zwischen Hähnen auf Bushaltestellen oder Bussen unterscheiden.
    • Die OnClick-Methode beider Marker erhält nur das Marker-Objekt, von wo aus ich nicht zu viele Informationen wie die Bushaltestelle bekommen kann, um seine Aktivität zu öffnen (und ich hoffe, es gibt einen besseren Weg als das Tragen des Titels String! O_O)

    Ich denke, diese beiden Probleme könnten mit verschiedenen Subclasen von Marker gelöst werden, aber es hat keinen Konstruktor und Sie erhalten seine Referenz beim Hinzufügen auf die Karte, also weiß ich nicht, ob es möglich ist, eine benutzerdefinierte Implementierung zu verwenden.

    Die API ist neu, so gibt es nicht viele Informationen über das Web über ähnliche Probleme. Ich habe versucht, herauszufinden, wie das zu lösen, aber ich habe nichts. Kennt jemand eine mögliche Lösung dafür?

    Vielen Dank.

    EDIT: Ein Screenshot aus der Liste meiner aktuellen Bewerbung mit zwei Markierungen: Ein Screenshot aus der Liste meiner aktuellen Bewerbung mit zwei Markierungen

  • Gibt es ein gutes Werkzeug für Android Layout Design?
  • Robolectric sagt "AndroidManifest.xml nicht gefunden"
  • Erkennung der Berührung auf Bitmap
  • Android Bluetooth-Socket-Tutorial für nicht blockierende Kommunikation
  • Google Play Services Library Update und fehlendes Symbol @ integer / google_play_services_version
  • Reagieren Sie Native v Xamarin Formulare - Auswahl Kreuz Plattform App Umwelt
  • 4 Solutions collect form web for “Maps API v2 mit verschiedenen Markeraktionen”

    Ich habe auch dieses Problem eingeleitet. Meine Lösung war:

    private Map<Marker, MyModel> markerMap = new HashMap<>(); private GoogleMap mMap; private void doMarkers(){ MarkerOptions opt = new MarkerOptions(); //Fill out opt from MyModel Marker marker = mMap.addMarker(opt); markerMap.put(marker, myModel); } 

    Und dann in den OnMarkerClickListener Rückruf, zieh dein Modell aus der HashMap mit dem Klick Marker. Es gibt auch eine Methode Marker.getId (), die aus irgendeinem Grund einen String zurückgibt. Ich verstehe nicht, warum du keine int ID angeben kannst, wenn du den Marker machst oder warum du nicht auf das Markerobjekt zugreifen kannst, bevor du es der Karte hinzufügst.

    UPDATE: Nach fast 4 Jahren hat Google eine Methode Marker.setTag(Object tag) hinzugefügt, um beliebige Daten mit einer Markierung zu verknüpfen.

    Ok hier ist eine Lösung, die ich beschlossen habe zu verwenden und AFAIK sollte für jede Situation arbeiten:

     private HashMap<String, MyModel> markers= new HashMap<String, MyModel>(); MyModel item = ... MarkerOptions markerOptions = ... markers.put(mMap.addMarker(markerOptions).getId(), item); @Override public void onInfoWindowClick(Marker marker) { MyModel mapItem = (MyModel) markers.get(marker.getId());. ... } 

    Sie können die getId Methode des getId verwenden

    Du kannst den HashMarker so benutzen. In diesem Beispiel y Ladung Punkte in Arraylist und jeder Punkte cointaints eine neue ArrayList mit Koordinaten. Und die Idee ist, dass du die Punkt-ID bekommst.

    Erstellen Sie eine HashMap

    Marker = neue HashMap ();

    Dann erstellen Sie einen Marker und fügen der Karte hinzu

    Endlich Marker marker = map.addMarker (new MarkerOptions ()) Position (new latLng (coordinates.get (j) .getLat (), coordinates.get (j) .getLon ())) title (point.getName () );

    Dann können Sie die Punkt-ID mit dem Marker-Wert speichern

    Markers.put (Marker, point.getId ());

    Und endlich kannst du den id-Wert erhalten, wenn du auf den InfoWindow klickst

    Public void onInfoWindowClick (Marker marker) {

      final long id = Marcadores.get(marker); Log.e("Real Marker ID", id+""); } 

    ODER

    Wenn du auf den Marker klickst

    Public boolean onMarkerClick (Marker arg0) {

      final long id = Marcadores.get(marker); Log.e("Real Marker ID", id+""); return false; } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.