android - Maps V2 InfoWindow 中的动态内容

标签 android google-maps infowindow universal-image-loader

我想在 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()

所以你需要做三件事:

  1. 创建模型,不把所有的下载放到InfoWindowAdapter
  2. 保存对标记的引用(称为 markerShowingInfoWindow)
    来自 getInfoContents(Marker marker)
  3. 当模型通知您下载完成时调用
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isInfoWindowShown()) {
    markerShowingInfoWindow.showInfoWindow();
}

关于android - Maps V2 InfoWindow 中的动态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15503266/

相关文章:

android - 如何判断经纬度是否准确

google-maps - 使用 google map api 将 google 图表添加到信息窗口

ios - 使用 Google map iOS sdk 在 swift 中创建自定义信息窗口?

android - Dagger 2 基于上下文的范围

android - 如何在全屏模式下实现android视频播放器

Python:对 Google Maps API 的请求 - 握手问题

google-maps - 如何使用 Google Maps Javascript API V3 在加载时设置信息窗口内容

java - API 22 与 API 23 中的 Seekbar Progress Drawable 调整大小不同

android - 提取跟踪文件时出错-sdcard

java - 使用 Google Maps API v2 获取行车路线