【问题标题】:How to prevent reloading of images in listview with custom adapter when refresh listview刷新列表视图时如何防止使用自定义适配器重新加载列表视图中的图像
【发布时间】:2015-07-16 02:44:15
【问题描述】:

我在适配器类中使用 UniversalImageLoader 库的displayImage() 方法,它在列表项中设置图像(来自 url)。我想如果我在列表视图中重置适配器,如果 url 与以前的 url 相同,则不应重新加载图像。

【问题讨论】:

  • 你想让你的列表视图不显示图像吗?

标签: android android-listview baseadapter universal-image-loader


【解决方案1】:

Universal Image Loader的issue部分已经发布了两个解决方案。

Solution #1:

您可以使用自定义显示:

new FadeInBitmapDisplayer(300) {

  @Override
            public Bitmap display(Bitmap bitmap, ImageView imageView, LoadedFrom loadedFrom) {
                if (loadedFrom != LoadedFrom.MEMORY_CACHE) {
                    return super.display(bitmap, imageView, loadedFrom);
                } else {
                    imageView.setImageBitmap(bitmap);
                    return bitmap;
                }
            }

        }

Solution #2:

 BitmapDisplayer displayer = new FadeInBitmapDisplayer(500) {

        @Override
        public Bitmap display(Bitmap bitmap, ImageView imageView,
                LoadedFrom loadedFrom) {
            if (loadedFrom != LoadedFrom.MEMORY_CACHE) {
                return super.display(bitmap, imageView, loadedFrom);
            } else {
                imageView.setImageBitmap(bitmap);
                return bitmap;
            }
        }

    };
    DisplayImageOptions options = new DisplayImageOptions.Builder()
            .cacheInMemory(true).resetViewBeforeLoading(true)
            .showImageForEmptyUri(R.drawable.thumbnail_no_image)
            .showImageOnFail(R.drawable.thumbnail_no_image)
            .displayer(displayer).build();
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
            context).defaultDisplayImageOptions(options)
            .memoryCacheSize(2 * 1024 * 1024).build();
    sLoader.init(config);

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,并采用了如下解决方案

    在声明您的 imageview 后,在 getview 方法中尝试以下行作为第一行

    myImageView.setImageResource(R.drawable.adefaultimage);
    

    这将首先在 imagview 中显示一个默认图像,并在图像加载器加载真实图像之前避免图像重复

    【讨论】:

    • 使用Universal Image loader的重点是,它会缓存图像并防止内存不足的异常问题。
    • @YuvaRaj 这只是一个分辨率/尺寸非常小的默认图像,可以从可绘制对象中获取,以避免在 listvie/gridview 等中重复图像。在这种视图中,UIL 通常会再次显示已经显示的图像,直到新图像被加载。这可以通过这种方式轻松避免,我已经实现了
    【解决方案3】:

    要实现这一点:

    在列表适配器中使用 android Lru 缓存。第一次它看起来很复杂,但它有更多的好处。

    使用 Lru 缓存您的图像存储在缓存中,当它显示时,然后从缓存中检查它是否存在,然后它不会下载,它将使用存储的缓存内存。您还可以为您的应用程序提供缓存大小并清除它。

    下面有一些链接:

    教程:

    1. http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

    2. http://developer.android.com/reference/android/util/LruCache.html

    例子:

    1. http://android-er.blogspot.in/2012/07/caching-bitmaps-with-lrucache.html

    2. http://android-er.blogspot.in/2012/07/apply-lrucache-on-gridview.html

    【讨论】:

      【解决方案4】:

      我尝试了上述解决方案但没有发现有用,最后我通过将图像从 url 保存到设备(作为位图)然后从那里进入列表视图来解决我的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多