我在我的应用中使用谷歌地图只有很少的标记。每隔几秒钟我就会从API标记位置加载。每个标记都设置了标题和摘要。在片段中,我想显示加载数据的时间。
问题是,当用户点击其中一个标记并且标题和片段的InfoWindow
可见时,之后我更改了片段和内容但是可见InfoWindow
上的内容未更改 - 用户必须单击地图以隐藏InfoWindow
和再次单击标记 - 然后内容是正确的。
在标题或代码段发生变化后,是否可以刷新InfoWindow
内容?
我使用Android Maps Extensions https://github.com/mg6maciej/android-maps-extensions找到了解决方案。
更新标记数据后调用此方法:
Marker m = map.getMarkerShowingInfoWindow();
if (m != null && !m.isCluster()) {
m.showInfoWindow();
}
请注意,在Google Maps Android API的文档中:
绘制的info window不是实时视图。视图在返回时呈现为图像(使用View.draw(Canvas))。这意味着对视图的任何后续更改都不会被地图上的信息窗口反映出来。要稍后更新信息窗口(例如,在加载图像后),请调用showInfoWindow()。此外,信息窗口将不会考虑正常视图(例如触摸或手势事件)的任何典型交互。但是,您可以在整个信息窗口中收听通用点击事件,如下节所述。
然后,如果你想做实时功能。我建议学习如何使用Firebase with Google maps。
什么是Firebase?
Firebase是一个具有许多功能的应用程序平台。本教程使用其实时数据库。数据存储为JSON,实时同步到所有连接的客户端,即使您的应用程序脱机也可用。
在使用onDataChange引入firebase数据后,我更新了Marker。
if (marker != null && marker.isInfoWindowShown() ) {
marker.showInfoWindow();
}