Web から取得した画像を動的に読み込むためにUniversal Image Loader 1.8.6ライブラリを使用しています。
ImageLoaderConfiguration
構成は次のとおりです。
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();
DisplayImageOptions
構成は次のとおりです。
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
。
これらのイメージのリロードを回避するにはどうすればよいですか? Universal Image Loader を使用して、以前に読み込んだ画像をキャッシュできますか?
注:私のグリッドには多くの画像を含めることができるため、disk cache
(メモリ キャッシュではなく) の実装を使用します。キャッシュされるファイルの最大数を設定するために使用できることがわかったのに.discCacheFileCount()
、ファイルがキャッシュされていないように見えるのはなぜですか?