我想在Maps V2片段中显示有关标记的InfoWindow。 事实是,我想展示使用Universal Image Downloader从网络动态加载的BitMaps。
这是我的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
并稍后对其进行了更改(在我的情况下,BitMap
上的新ImageView
)未显示/ {{1没有更新。 InfoWindow
完成后,如何“通知”InfoWindow重新加载?当我把
imageLoader
进入marker.showInfoWindow()
它创建了一个无限循环,标记将弹出,开始加载图像,自动弹出等等。
我的第二个问题是,在慢速网络连接上(模拟代码中的5000毫秒延迟),onLoadingComplete
中的ImageView
将始终显示最后加载的图像,无论该图像是否属于InfoWindow
/ ImageWindow
。
有关如何正确实施此建议的任何建议?
答案 0 :(得分:30)
当您收到模型更新时,您应该在当前显示信息窗口的标记上执行Marker.showInfoWindow()
。
所以你需要做三件事:
InfoWindowAdapter
markerShowingInfoWindow
)getInfoContents(Marker marker)
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isInfoWindowShown()) {
markerShowingInfoWindow.showInfoWindow();
}
答案 1 :(得分:4)
我做了类似的事情。 这仍然给我带来经济衰退错误
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) {
markerShowingInfoWindow.showInfoWindow();
}
所以我所做的只是关闭窗口并再次打开它
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) {
markerShowingInfoWindow.hideInfoWindow();
markerShowingInfoWindow.showInfoWindow();
}
对于同一答案的更详细版本,这是我最初的灵魂LINK
答案 2 :(得分:0)
我已经使用了本文中的代码,但效果很好。
http://androidfreakers.blogspot.de/2013/08/display-custom-info-window-with.html
答案 3 :(得分:0)
我也面临同样的情况,并使用以下代码解决。
在我的适配器中,我添加了公共变量
public class MarkerInfoWindowAdapter implements GoogleMap.InfoWindowAdapter {
public String ShopName="";
-------
-------
@Override
public View getInfoWindow(Marker arg0) {
View v;
v = mInflater.inflate(R.layout.info_window, null);
TextView shop= (TextView) v.findViewById(R.id.tv_shop);
shop.setText(ShopName);
}
}
并在我的主要活动中添加了MarkerClickListener
----
MarkerInfoWindowAdapter mMarkerInfoWindowAdapter;
----
----
@Override
public void onMapReady(GoogleMap googleMap) {
mMarkerInfoWindowAdapter = new MarkerInfoWindowAdapter(getApplicationContext());
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(final Marker arg0) {
mMarkerInfoWindowAdapter.ShopName= "my dynamic text";
arg0.showInfoWindow();
return true;
}
}
mMap.setInfoWindowAdapter(mMarkerInfoWindowAdapter);
}