2017-02-25 1 views
0

Ich habe eine Liste von Spots bekommen, die auf einer Mapbox (Android App) als Marker angezeigt werden. Wenn der Benutzer auf eine Markierung klickt, wird das InfoWindow angezeigt. Ich wollte dem InfoWindow einen ClickListener hinzufügen, sodass ich ihn auf eine Seite mit weiteren Informationen zu diesem Spot weiterleite, wenn der Nutzer darauf klickt.Welches Objekt entspricht der angeklickten Markierung? Mapbox onInfoWindowClick

Marker haben keine setId, setTag oder ähnliches. Wie kann ich also erkennen, welches Objekt in meiner Liste dem angeklickten Marker entspricht?

Antwort

0

Fand heraus, dass Vererbung möglich ist, und here's eine mögliche Lösung:

Ihre individuelle Markierung einen Tag enthält (oder was auch immer Sie wollen, um es hinzuzufügen):

public class UrlMarker extends Marker { 

private String tag; 

public UrlMarker(BaseMarkerOptions baseMarkerOptions, String tag) { 
    super(baseMarkerOptions); 
    this.tag = tag; 
} 

public String getTag() { 
    return tag; 
} 
} 

Und Ihre individuelle BaseMarkerOptions Klasse :

public class UrlMarkerOptions extends BaseMarkerOptions<UrlMarker, UrlMarkerOptions> { 

private String tag; 

public UrlMarkerOptions tag(String name) { 
    tag = name; 
    return getThis(); 
} 

public UrlMarkerOptions() { 
} 

private UrlMarkerOptions(Parcel in) { 
    position((LatLng) in.readParcelable(LatLng.class.getClassLoader())); 
    snippet(in.readString()); 
    String iconId = in.readString(); 
    Bitmap iconBitmap = in.readParcelable(Bitmap.class.getClassLoader()); 
    Icon icon = IconFactory.recreate(iconId, iconBitmap); 
    icon(icon); 
    tag(in.readString()); 
} 

@Override 
public UrlMarkerOptions getThis() { 
    return this; 
} 

@Override 
public UrlMarker getMarker() { 
    return new UrlMarker(this, tag); 
} 

public static final Parcelable.Creator<UrlMarkerOptions> CREATOR 
     = new Parcelable.Creator<UrlMarkerOptions>() { 
    public UrlMarkerOptions createFromParcel(Parcel in) { 
     return new UrlMarkerOptions(in); 
    } 

    public UrlMarkerOptions[] newArray(int size) { 
     return new UrlMarkerOptions[size]; 
    } 
}; 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel out, int flags) { 
    out.writeParcelable(position, flags); 
    out.writeString(snippet); 
    out.writeString(icon.getId()); 
    out.writeParcelable(icon.getBitmap(), flags); 
    out.writeString(tag); 
} 

} 

Wie verwenden:

UrlMarkerOptions myMarker = new UrlMarkerOptions("object-id"); 
mapboxMap.addMarker(myMarker); 
Verwandte Themen