使用Universal Image Loader在GridView中加载图像

我使用通用图像加载器1.8.6库来加载从网上拍摄的图像。

ImageLoaderConfigurationconfiguration如下:

 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) .memoryCacheExtraOptions(480, 800) // default = device screen dimensions .threadPoolSize(3) // default .threadPriority(Thread.NORM_PRIORITY - 1) // default .denyCacheImageMultipleSizesInMemory() .memoryCacheSize(2 * 1024 * 1024) .memoryCacheSizePercentage(13) // default .discCacheSize(50 * 1024 * 1024) .discCacheFileCount(100) .imageDownloader(new BaseImageDownloader(getApplicationContext())) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .writeDebugLogs() .build(); 

DisplayImageOptionsconfiguration是:

 DisplayImageOptions options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.no_foto) .showImageForEmptyUri(R.drawable.no_foto) .showImageOnFail(R.drawable.no_foto) .build(); 

我的ArrayAdapter中的方法getView包含代码:

 iv.setImageResource(R.drawable.no_foto); imageLoader.displayImage(basePath+immagine, iv); 

上面代码的第一行是为了避免在gridview中回收视图允许将图像设置在错误的位置(直到图片未被下载)。

实际的问题是这样的:

如果我打开我的活动(包含GridView )显示的项目感谢UIL库可以下载图像。 (同时网格的每个视图中都会显示no_foto.png图像)。 当所有的视图加载自己的图像,如果我试图向下滚动,然后我回来(向上滚动),我必须等待图像重新加载,因为所有的意见现在被no_foto.png图像占用。

我怎样才能避免重新加载这些图像? 使用通用图像加载器,我可以caching以前加载的图像?

注:由于我的网格可以包含许多图像,我会使用disk cache (而不是内存caching)的实现。 我发现.discCacheFileCount()可用于设置caching文件的最大数量,所以为什么看起来我的文件没有caching?

Solutions Collecting From Web of "使用Universal Image Loader在GridView中加载图像"

我已经解决了这个问题

我只是宣布的select,但我没有使用它,所以我修改了这一行:

 imageLoader.displayImage(basePath+immagine, iv); 

成:

 imageLoader.displayImage(basePath+immagine, iv, options); 

并在选项中添加了方法:

 .cacheOnDisc(true) 

UIL默认不启用caching,所以如果你想使用caching你应该使用

 // Create default options which will be used for every // displayImage(...) call if no options will be passed to this method DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() ... .cacheInMemory() .cacheOnDisc() ... .build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) ... .defaultDisplayImageOptions(defaultOptions) ... .build(); ImageLoader.getInstance().init(config); // Do it on Application start 

加载图片时使用:

 // Then later, when you want to display image ImageLoader.getInstance().displayImage(imageUrl, imageView); // Default options will be used 

另一种方法是

 DisplayImageOptions options = new DisplayImageOptions.Builder() ... .cacheInMemory() .cacheOnDisc() ... .build(); ImageLoader.getInstance().displayImage(imageUrl, imageView, options); 

你可以在这里find更多的信息