哪个对象对应于单击的标记? Mapbox onInfoWindowClick

Which object corresponds to the clicked marker? Mapbox onInfoWindowClick

我得到了一个点列表,这些点显示在 Mapbox(android 应用程序)上作为标记。当用户单击标记时,信息窗口会弹出。我想向该 InfoWindow 添加一个 ClickListener,以便当用户单击它时,我将他重定向到包含有关该 Spot 的更多信息的页面。

标记没有 setId、setTag 或类似的东西。那么我如何才能知道我的列表中的哪个对象对应于该单击的标记?

发现继承是可能的,here's一种可能的解决方案:

您的自定义标记包含标签(或您要添加的任何其他内容):

public class UrlMarker extends Marker {

private String tag;

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

public String getTag() {
    return tag;
}
}

以及您的自定义 BaseMarkerOptions class:

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

}

使用方法:

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