31

Nun, jeder Marker in meiner Anwendung wird einen Benutzer darstellen, also muss ich diesen Benutzer identifizieren, wenn ich auf das Infofenster klicke, um seine Daten aus dem Internet zu bekommen, und ich kann Machen Sie es aus offensichtlichen Gründen nicht namentlich. Ist es möglich, einem Markerobjekt ein zusätzliches Attribut hinzuzufügen? Vielen Dank!Identifikation zu Markierung auf Google Maps hinzufügen v2 api für Android

+0

Wie haben Sie die Marker hinzugefügt? als Überlagerung? –

+0

Sie können das Snippet-Feld der Marker-Klasse verwenden. –

+0

Ich habe einen Untertitel im Snippet-Feld, das ist keine Option. Was meinst du als Überlagerung? Ich füge sie mit map.addmarker (... – vdrg

Antwort

8

Ist es möglich, einem Marker-Objekt ein zusätzliches Attribut hinzuzufügen?

Nr. Marker ist final. Außerdem verschwinden die Marker Objekte, die Sie erstellen, schnell, da sie nur für einige IPCs in der Google Play Services App verwendet werden. Das Marker Objekt, das Sie in Ihrer OnInfoWindowClickListener erhalten, scheint eine wiederhergestellte Kopie zu sein.

Ich habe einen Untertitel im Snippet-Feld, so dass das keine Option ist.

Sicher ist es. Speichere den Untertitel an einer anderen Stelle und lege den Schlüssel deinem Benutzer im Untertitel. Wenn Sie die InfoWindow von Ihrer InfoWindowAdapter rendern, ziehen Sie den Untertitel.

2

Hier ist eine etwas einfachere Lösung, die ich umgesetzt haben. Alles, was Sie tun, ist einen InfoWindowAdapter zu erstellen, der etwas übernimmt, das Sie an das Fenster im Konstruktor übergeben möchten.

class CustomWindowAdapter implements InfoWindowAdapter{ 
LayoutInflater mInflater; 
private HashMap<Marker, Double> mRatingHash; 

public CustomWindowAdapter(LayoutInflater i, HashMap<Marker, Double> h){ 
    mInflater = i; 
    mRatingHash = h; 
} 

@Override 
public View getInfoContents(Marker marker) { 
    // Getting view from the layout file 
    View v = mInflater.inflate(R.layout.custom_info_window, null); 

    TextView title = (TextView) v.findViewById(R.id.tv_info_window_title); 
    title.setText(marker.getTitle()); 

    TextView description = (TextView) v.findViewById(R.id.tv_info_window_description); 
    description.setText(marker.getSnippet()); 

    RatingBar rating = (RatingBar) v.findViewById(R.id.rv_info_window); 
    Double ratingValue = mRatingHash.get(marker); 
    rating.setRating(ratingValue.floatValue()); 
    return v; 
} 

@Override 
public View getInfoWindow(Marker marker) { 
    // TODO Auto-generated method stub 
    return null; 
} 
} 

Sie sind verantwortlich für alle Daten, die Sie im Infofenster übergeben wollen, aber Sie können hier sehen, dass ich einen Hash der Bewertungen bin vorbei. Nur ein Prototyp und ist keineswegs die beste Lösung, aber dies sollte jeden starten.

+0

Mein Tag gerettet .. danke Kumpel – Noman

5

Ich denke nicht, dass es eine gute Idee ist, starke Hinweise auf Marker über eine Karte zu halten. Da Sie Ihren benutzerdefinierten Fensteradapter trotzdem zum Rendern von Inhalten verwenden, könnten Sie entweder das snippet() oder title() in den MarkerOptions "missbrauchen", um Ihre Informationen zu speichern. Sie sind beide Zeichenfolgen, also hängt die Information ab, dass Sie etwas mehr Speicher verwenden würden, auf der anderen Seite sind Sie vor Speicherlecks geschützt, indem Sie starke Referenzen auf Markierungen halten.

auch, würden Sie kompatibel mit der Art und Weise gehen, wie Maps es persistency während Stops verwaltet und fortfährt.

0

Ich verwende eine zusätzliche Klasse, um einige Informationen und Funktionen mit jedem Marker zu verbinden. Ich denke nicht, dass dies der beste Ansatz ist, aber es ist eine Option. Vor allem, wenn Sie mehr als nur Informationen zu jedem Kartenmarker haben möchten. Hier ist die Grundstruktur, die ich dafür verwende.

Verwandte Themen