我想在 Maps V2 fragment 中的标记上显示信息窗口。 问题是,我想显示从网络动态加载的位图 Universal Image Downloader .
这是我的 InfoWindowAdapter:
class MyInfoWindowAdapter implements InfoWindowAdapter {
private final View v;
MyInfoWindowAdapter() {
v = getLayoutInflater().inflate(R.layout.infowindow_map,
null);
}
@Override
public View getInfoContents(Marker marker) {
Item i = items.get(marker.getId());
TextView tv1 = (TextView) v.findViewById(R.id.textView1);
ImageView iv = (ImageView) v.findViewById(R.id.imageView1);
tv1.setText(i.getTitle());
DisplayImageOptions options = new DisplayImageOptions.Builder()
.delayBeforeLoading(5000).build();
imageLoader.getMemoryCache();
imageLoader.displayImage(i.getThumbnailUrl(), iv, options,
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingComplete(String imageUri,
View view, Bitmap loadedImage) {
Log.d("MAP", "Image loaded " + imageUri);
}
@Override
public void onLoadingCancelled(String imageUri,
View view) {
// TODO Auto-generated method stub
}
});
return v;
}
@Override
public View getInfoWindow(Marker marker) {
// TODO Auto-generated method stub
return null;
}
}
我有两个问题:
正如我们 know InfoWindow
被绘制,随后对其进行更改(在我的情况下,ImageView
上的新 BitMap
)未显示/InfoWindow
未更新。 imageLoader
完成后,如何“通知”InfoWindow 重新加载自身?当我放
marker.showInfoWindow()
进入 onLoadingComplete
它创建了一个无限循环,标记将弹出,开始加载图像,弹出自身等。
我的第二个问题是,在慢速网络连接上(模拟代码中的 5000ms 延迟),InfoWindow
中的 ImageView
将始终显示最后加载的图像,无论该图像是否属于该 ImageWindow
/Marker
。
关于如何正确实现此功能的任何建议?
最佳答案
当您收到模型更新时,您应该在当前显示信息窗口的标记上执行 Marker.showInfoWindow()
。
所以你需要做三件事:
- 创建模型,不把所有的下载放到
InfoWindowAdapter
- 保存对标记的引用(称为
markerShowingInfoWindow
)
来自getInfoContents(Marker marker)
- 当模型通知您下载完成时调用
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isInfoWindowShown()) {
markerShowingInfoWindow.showInfoWindow();
}
关于android - Maps V2 InfoWindow 中的动态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15503266/