バックグラウンドスレッドで大量の画像をダウンロードするアプリがあります。各アイコンがダウンロードされると、BaseAdapterをサブクラス化するカスタムアダプターのArrayListに追加します。BaseAdapterを使用するListViewの各行には、ImageViewがあります。getViewでは、次のことを行います。
public View getView(int position, View convertView, ViewGroup parent) {
final MyCustomImageClass imageObject = data.get(position);
View vi = convertView;
if(convertView==null) {
vi = inflater.inflate(R.layout.list_row, null);
}
ImageView thumbnail = (ImageView)vi.findViewById(R.id.list_image);
File appDir = new File(Utils.getAppFilesDir() +"");
File imageFolder = new File(appDir, imageObject.getImageFolderName());
File imageDir = new File(imageFolder, imageObject.getIconFilename());
Log.e("myapp", "row image dir: " + imageDir.toString());
if(imageDir.exists()) {
Bitmap imageBitmap = BitmapFactory.decodeFile(imageDir.toString());
thumbnail.setImageBitmap(imageBitmap);
}
thumbnail.invalidate();
}
しかし、私が見ているのは、thumbnail
古い画像を再利用しているということです。同様に、logcatで別のパスが表示されていても、最初の数行は同じサムネイル画像になります。
ListViewの行に、そのImageViewに新しいビットマップイメージがあることを通知するにはどうすればよいですか?