android:从url加载后保留显示的图像?

时间:2012-09-07 09:28:25

标签: android android-imageview android-gridview

我正在从xml中恢复大约20个图像网址,并将它们显示在gridview中。 除了一个之外,事情变得很好。

当我向下滚动新图片开始加载,但是当我再次向上滚动时。以前加载的图像再次加载

我该如何解决这个bug。以前加载的图像应该保留在布局中,为什么它不会保留自己。

我正在使用适配器扩展BaseAdapter来查看图像

3 个答案:

答案 0 :(得分:2)

Gridview像继承AdapterView的任何其他视图一样,只使用您在屏幕上看到的视图数量。因此,滚动视图时将重复使用。适配器的职责是将内容重新分配给视图。

因此,您需要缓存位图。 Android开发人员方面有一个非常好的教程。 http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

(我在示例中使用网格视图)

答案 1 :(得分:1)

每次滚动时,都会调用适配器的getView()方法。

因此,每次进入屏幕的视图都是在getView()方法中构建的。 您在该方法中构建新视图,我想您在调用该方法时下载图像,然后一个解决方案是缓存图像。如果您下载的图片数量很少而且尺寸很小,只需使用关键网址和值位图来解决问题,如果没有,请使用数据库。

每次调用getView()时,首先检查图像是否在缓存中,如果图像在缓存中,则使用它来构建视图,如果没有下载它。

答案 2 :(得分:1)

使用此博客中的LoaderImageView http://blog.blundell-apps.com/imageview-with-loading-spinner/&添加以下功能

public void setImageDrawable(final MyGridViewItem obj) {
                mDrawable = null;
                if(obj.mDrawable != null){
                      mDrawable = obj.mDrawable
                imageLoadedHandler.sendEmptyMessage(COMPLETE);
                 return;
                }
                mSpinner.setVisibility(View.VISIBLE);
                mImage.setVisibility(View.GONE);
                new Thread(){
                        public void run() {
                                try {
                                          mDrawable = getDrawableFromUrl(imageUrl);
                                           obj.mDrawable = mDrawable;

                                        imageLoadedHandler.sendEmptyMessage(COMPLETE);
                                } catch (MalformedURLException e) {
                                        imageLoadedHandler.sendEmptyMessage(FAILED);
                                } catch (IOException e) {
                                        imageLoadedHandler.sendEmptyMessage(FAILED);
                                }
                        };
                }.start();
        }