我有一张地图,我在其中创建不同类型的标记。我无法将信息窗口适配器分配给标记(哎呀,这不是很好),我只能为整个地图分配 InfoWindowAdapter(至少我认为)。
我的问题是我想根据我点击的内容显示不同类型的信息窗口。是否是设置一个 InfoWindowAdapter 的唯一方法,该适配器将根据我传递的标记来处理创建正确类型的信息窗口?
我错过了一些简单的事情吗?
当您向地图添加标记时,您将收到一个 ID,它唯一标识您的标记。
添加标记并将其放入地图后,您可以立即创建 InfoWindowAdapter 的实例,这会将 ID 作为键,将 InfoWindowAdapter 作为值。
Marker marker = map.addMarker(options);
// Create your special infoWindowAdapter for this marker
// ...
adapterMap.put(marker.getId(), youSpecialInfoWindowAdapter);
在您在地图上注册的一个中央 InfoWindowAdapter 中,您只需使用标记的 ID 即可获取特定的 InfoWindowAdapter 并委托给该 InfoWindowAdapter 的方法。
访问地图可以例如在 InfoWindowAdapter 的构造函数中提供(以避免全局或静态变量):
class CentralInfoWindowAdapter implements InfoWindowAdapter {
Map<String, GoogleMap.InfoWindowAdapter> adapterMap;
public CentralInfoWindowAdapter(
Map<String, GoogleMap.InfoWindowAdapter> adapterMap) {
this.adapterMap = adapterMap;
}
@Override
public View getInfoContents(Marker marker) {
InfoWindowAdapter adapter = adapterMap.get(marker.getId());
return adapter.getInfoContents(marker);
}
@Override
public View getInfoWindow(Marker marker) {
InfoWindowAdapter adapter = adapterMap.get(marker.getId());
return adapter.getInfoWindow(marker);
}
}
当然,你可以改变这个原则。如果根据标记的“类型”只有几个不同的 InfoWindowAdapter,您可以在映射中放入一个枚举,它标识标记的类型并让您决定在中央 InfoWindowAdapter 内使用哪种真正的 InfoWindowAdapter ,或者您仍然可以将特殊 InfoWindowAdapter 的实例放入地图中,但对相同类型的标记使用相同的实例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)