2017-02-25 39 views
0

我得到了一个Mapbox(android应用程序)上显示的Spots列表作为标记。当用户点击标记时,InfoWindow弹出。我想将一个ClickListener添加到InfoWindow中,以便当用户点击它时,我将他重定向到一个包含有关该Spot的更多信息的页面。哪个对象对应于点击标记? Mapbox onInfoWindowClick

标记没有setId,setTag或类似的东西。那么我怎么能知道我列表中的哪个对象与那个被点击的标记相对应呢?

回答

0

发现,继承是可能的,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类:

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