我有一张 map ,我正在其中创建不同类型的标记。我无法将信息窗口适配器分配给标记(哎呀,那不是很好),我只能在整个 map 的 InfoWindowAdapter 上分配(至少我认为)。
我的问题是我想根据我点击的内容显示不同类型的信息窗口。设置一个 InfoWindowAdapter 的唯一方法是根据我传递的标记处理创建正确类型的信息窗口吗?
我是不是错过了什么简单的东西?
最佳答案
当您向 map 添加标记时,您会收到一个 ID,该 ID 可以唯一标识您的标记。
您可以在添加标记并将其放入 map 后立即创建 InfoWindowAdapter 的实例,这会将 ID 作为键,将您的 InfoWindowAdapter 作为值。
Marker marker = map.addMarker(options);
// Create your special infoWindowAdapter for this marker
// ...
adapterMap.put(marker.getId(), youSpecialInfoWindowAdapter);
在您在 map 上注册的一个中央 InfoWindowAdapter 中,您可以只使用标记的 ID 来获取特定的 InfoWindowAdapter 并委托(delegate)给它的方法。 访问 map 可以例如在 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,则可以将枚举放入 map 中,它标识标记的类型并让您决定在中央 InfoWindowAdapter 中使用哪种真正的 InfoWindowAdapter ,或者您仍然可以将特殊 InfoWindowAdapter 的实例放入 map 中,但对相同类型的标记使用相同的实例。
关于android - 多个 InfoWindowAdatper 的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143969/