Maps V2 InfoWindow中的动态内容

asc*_*sco 16 android google-maps infowindow universal-image-loader

我想在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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我有2个问题:

正如我们所知,InfoWindow已经绘制并且稍后对其进行了更改(在我的情况下,新BitMap的内容ImageView)未显示/ InfoWindow未更新.如何在imageLoader完成后"通知"InfoWindow重新加载?当我放

marker.showInfoWindow()
Run Code Online (Sandbox Code Playgroud)

进入onLoadingComplete它创建了一个无限循环,标记将弹出,开始加载图像,弹出自己等.

我的第二个问题是,在慢速网络连接(模拟代码中的5000毫秒延迟)中,无论该图像属于那个/ ImageView,它InfoWindow都将始终显示最后加载的图像.ImageWindowMarker

有关如何正确实施此建议的任何建议?

Mac*_*ski 30

Marker.showInfoWindow()当您收到模型更新时,您应该在当前显示信息窗口的标记上执行操作.

所以你需要做3件事:

  1. 创建模型而不是将所有下载放入 InfoWindowAdapter
  2. 保存参考标记(叫它markerShowingInfoWindow)
    getInfoContents(Marker marker)
  3. 当模型通知您下载完成呼叫时
if (markerShowingInfoWindow != null && markerShowingInfoWindow.isInfoWindowShown()) {
    markerShowingInfoWindow.showInfoWindow();
}
Run Code Online (Sandbox Code Playgroud)

  • 编程不是关于执行复制粘贴操作.我的答案应该很容易理解,如果不是,你可以提出一个问题来澄清事情. (17认同)

Jam*_*son 5

我做了类似的事情。这仍然给了我经济衰退的错误

if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) {
    markerShowingInfoWindow.showInfoWindow();
}
Run Code Online (Sandbox Code Playgroud)

所以我所做的只是简单地关闭窗口并再次打开它

if (markerShowingInfoWindow != null && markerShowingInfoWindow.isShowingInfoWindow()) {

    markerShowingInfoWindow.hideInfoWindow();
    markerShowingInfoWindow.showInfoWindow();

}
Run Code Online (Sandbox Code Playgroud)

有关同一答案的更详细版本,请点击此处,以了解我的原始链接