【问题标题】:Android GoogleMap 2 update information dynamically in InfoWindow with ImageView via Universal Image loaderAndroid GoogleMap 2 通过通用图像加载器在 InfoWindow 中使用 ImageView 动态更新信息
【发布时间】:2013-04-15 04:35:47
【问题描述】:

我正在开发新的 Google Map v2 API。

我使用 ImageLoader 在 Marker 上动态显示图像。

但问题是当我得到 Universal Image Loader 的 onLoadingComplete() 时,ImageView 不会自动或手动失效。

下次如果我点击相同的标记,图像将从通用图像加载器的缓存中显示。

下面是我的 CustomInfoWindowAdapter 代码:

private class CustomInfoWindowAdapter implements InfoWindowAdapter {

    @Override
    public View getInfoContents(Marker marker) {
        return null;
    }

    @Override
    public View getInfoWindow(Marker marker) {
        final View mWindow = getLayoutInflater().inflate(R.layout.custom_info_window, null);

        render(marker, mWindow);
        return mWindow;
    }

    private void render(final Marker marker, View view) {

        final String url = markers.get(marker.getId()).getStrProfilePic();
        final ImageView image = ((ImageView) view.findViewById(R.id.badge));
        Log.e(TAG, "URL : " + url);

        if ( url != null && !url.equalsIgnoreCase("null")
                && !url.equalsIgnoreCase("")) {
            imageLoader.displayImage(url, image, options, new SimpleImageLoadingListener() {
                @Override
                public void onLoadingComplete(String imageUri, View view,
                        Bitmap loadedImage) {
                    super.onLoadingComplete(imageUri, view, loadedImage);
                    ((ImageView) view).invalidate();
                }
            });
        } else {
            image.setImageResource(R.drawable.noimage);
        }

        final String title = marker.getTitle();
        final TextView titleUi = ((TextView) view.findViewById(R.id.title));
        if (title != null) {
            titleUi.setText(title);
        } else {
            titleUi.setText("");
        }

        final String snippet = marker.getSnippet();
        final TextView snippetUi = ((TextView) view.findViewById(R.id.snippet));
        if (snippet != null) {
            snippetUi.setText(snippet);
        } else {
            snippetUi.setText("");
        }
    }
}

当我添加 Marker 时,我将 Marker Id 存储在 HashTable 中。从他们那里我会得到照片的 URL。

【问题讨论】:

  • 显示选项?配置?你在 UI 线程上调用 displayImage(...) 吗?
  • 在render(final Marker marker, View view)中,我调用了imageLoader.displayImage(....)方法。

标签: android android-maps-v2 universal-image-loader


【解决方案1】:

信息窗口回调返回的视图之后无法更新。

尝试遵循此建议:Dynamic contents in Maps V2 InfoWindow

【讨论】:

    【解决方案2】:

    我在班级级别获取了一个 Marker 对象,并使用该对象来更新 Marker 信息。

    我已经自定义了我的类来更新 ImageView :

    private class CustomInfoWindowAdapter implements InfoWindowAdapter {
    
        private View view;
    
        public CustomInfoWindowAdapter() {
            view = getLayoutInflater().inflate(R.layout.custom_info_window, null);          
        }
    
        @Override
        public View getInfoContents(Marker marker) {
    
            if ( YourClassName.this.marker != null &&
                    ClassName.this.marker.isInfoWindowShown() ) {
                YourClassName.this.marker.hideInfoWindow();
                YourClassName.this.marker.showInfoWindow();
            }
            return null;
        }
    
        @Override
        public View getInfoWindow(final Marker marker) {
            YourClassName.this.marker = marker;
    
            final String url = markers.get(marker.getId()).getStrProfilePic();
            final ImageView image = ((ImageView) view.findViewById(R.id.badge));
    
            if ( url != null && !url.equalsIgnoreCase("null")
                    && !url.equalsIgnoreCase("")) {
                imageLoader.displayImage(url, image, options, new SimpleImageLoadingListener() {
                    @Override
                    public void onLoadingComplete(String imageUri, View view,
                            Bitmap loadedImage) {
                        super.onLoadingComplete(imageUri, view, loadedImage);
                        getInfoContents(marker);
                    }
                });
            } else {
                image.setImageResource(R.drawable.noimage);
            }
    
            final String title = marker.getTitle();
            final TextView titleUi = ((TextView) view.findViewById(R.id.title));
            if (title != null) {
                titleUi.setText(title);
            } else {
                titleUi.setText("");
            }
    
            final String snippet = marker.getSnippet();
            final TextView snippetUi = ((TextView) view.findViewById(R.id.snippet));
            if (snippet != null) {
                snippetUi.setText(snippet);
            } else {
                snippetUi.setText("");
            }
    
            return view;
        }
    }
    

    Check the Example

    【讨论】:

    • 在我的应用程序中,我不想显示多个地图。但是在 Map2 中,可以显示多个地图。演示在带有 google play 服务的 android sdk 中可用。
    • @NishantShah +1 为您解答,但是。如果您在评论中发布您的博客网址,那么整个示例会更容易:) androidfreakers.blogspot.in 谢谢 :)
    • @BhavinChauhan 添加了链接。谢谢。
    • 天才!刷新对我实际有用的信息窗口的唯一方法:D
    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2016-06-23
    相关资源
    最近更新 更多