多个InfoWindowAdapter的问题

3
我有一张地图,上面我正在创建不同类型的标记。我无法为标记分配信息窗口适配器(嗯,那会很好),我只能为整个地图分配一个InfoWindowAdapter(至少我这么认为)。
我的问题是,我想根据我点击的内容显示不同类型的信息窗口。设置一个InfoWindowAdapter来处理基于传递给它的标记创建正确类型的信息窗口是唯一的方法吗?
我是否漏掉了什么简单的东西?

你能贴一些代码吗? - S.Thiongane
2个回答

2
当你向地图添加标记时,会获得一个ID,这个ID唯一标识了你的标记。您可以在添加标记并将其放入地图后立即创建InfoWindowAdapter实例,并将其作为值存储在以ID为键的map中。
Marker marker = map.addMarker(options);
// Create your special infoWindowAdapter for this marker
// ...
adapterMap.put(marker.getId(), youSpecialInfoWindowAdapter);

在一个中央的InfoWindowAdapter中,你可以注册在地图上,只需要使用标记的ID即可获取特定的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);
    }

}

当然,您可以根据需要进行调整。如果您只有几种不同的InfoWindowAdapters取决于标记的“类型”,您可以将一个枚举放入地图中,以标识您的标记的类型,并让您决定在中央InfoWindowAdapter内使用哪种真正的InfoWindowAdapter,或者您仍然可以将特殊的InfoWindowAdapter实例放入地图中,但对于相同类型的标记使用相同的实例。


我想到了一个类似的解决方案,即在每次onMarkerClick中重置infowindowadapter。我认为这样更加优雅。非常感谢您的回复。很遗憾您不能在标记本身上设置onMarkerClick或onInfoWindow。 - lostintranslation

1
如果我理解正确,您想在每个标记上显示不同的窗口适配器?如果是这样,在每个标记上添加一个标签,然后在两个infowindow函数infowindow()或infocontents()中的其中一个内部检查标记,并添加适当的布局。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接