リモート画像の遅延読み込みを行うカスタムListViewがあります。リストアイテムをクリックすると、新しいアクティビティが開始され、画像がWebビューに表示されます。問題は、画像がリストビューアダプタによってプリロードされている場合でも、Webビューは常に画像をロードすることです。プリロードされていない場合にのみ、WebViewに画像をロードさせたいです。
リストビューに画像をプリロードする方法は次のとおりです。
public void DisplayImage(String url, ImageView imageView)
{
imageViews.put(imageView, url);
Bitmap bitmap=memoryCache.get(url);
if(bitmap!=null)
imageView.setImageBitmap(bitmap);
else
{
queuePhoto(url, imageView);
imageView.setImageResource(stub_id);
}
}
遅延ロードされた画像はFileCacheに保存されます。
public FileCache(Context context){
//Find the dir to save cached images
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"LazyList");
else
cacheDir=context.getCacheDir();
if(!cacheDir.exists())
cacheDir.mkdirs();
}
public File getFile(String url){
//I identify images by hashcode. Not a perfect solution, good for the demo.
String filename=String.valueOf(url.hashCode());
//Another possible solution (thanks to grantland)
//String filename = URLEncoder.encode(url);
File f = new File(cacheDir, filename);
return f;
}