我使用Google地图构建应用程序,显示一些标记。点击标记会显示带有图像和标题的自定义InfoWindow
。使用Picasso(因此异步)加载图像,因此我需要在Picasso完成加载时更新InfoWindow
。 Google地图以特定方式处理InfoWindow
- 它首先将我的自定义视图呈现为位图,因此我无法加载图片.into(imageView)
。相反,我创建一个Target
,覆盖onBitmapLoaded
,缓存图片,然后再次调用marker.showInfoWindow()
,以便使用缓存的图片再次呈现InfoWindow
。
问题出现在Marker::showInfoWindow
的竞争状态。我致电showInfoWindow
Marker::isInfoWindowShown
一段时间后返回false
。令人遗憾的是,如果我在此期间再次致电showInfoWindow
(例如,如果毕加索几乎立即加载图片,当它被毕加索缓存时)该呼叫将被忽略并且旧InfoWindow
(没有显示图像)。我设法通过创建一个几乎忙于等待Thread
成为marker.isInfoWindowShown()
的{{1}}然后再次调用true
来解决问题,但该解决方案非常适合。
所以问题是:如何在没有比赛的情况下重新绘制showInfoWindow
并且无需在单独的InfoWindow
上忙碌等待?