Listadapter の getView でキャッシュから画像を読み込む際に大きな問題があります。画像の読み込みには Picasso を使用しており、キャッシュから画像を読み込むための構成を作成します。使用可能な画像がない場合は、オンライン URI から画像を読み込む必要があります。
getView
(これは、私のアダプタの中で呼び出されるメソッドです)
@Override
protected void loadImages(final VehicleResultListItem inCurrentItem) {
// Try to load async the images from local path
Picasso.with(mContext)
.load(new File(mContext.getExternalFilesDir(null),
inCurrentItem.getVehicleId()))
.placeholder(inCurrentItem.getServiceType().getPlaceholderId())
.noFade()
.into(new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap,
final Picasso.LoadedFrom from) {
mThumbnailImgView.setImageBitmap(bitmap);
}
@Override
public void onBitmapFailed(final Drawable errorDrawable) {
// If the local-path-loading fails, try to grab the images online.
Picasso.with(mContext)
.load(inCurrentItem.getImageURIs().get(0).getImageUriSizeM())
.placeholder(inCurrentItem.getServiceType().getPlaceholderId())
.into(new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap,
final Picasso.LoadedFrom from) {
// On succesfully online-loading of the images, store and show them
mThumbnailImgView.setImageBitmap(bitmap);
saveToInternalSorage(bitmap, inCurrentItem);
}
@Override
public void onBitmapFailed(final Drawable errorDrawable) {
// NO interaction
}
@Override
public void onPrepareLoad(final Drawable placeHolderDrawable) {
// No interaction
}
});
}
@Override
public void onPrepareLoad(final Drawable placeHolderDrawable) {
mThumbnailImgView.setImageDrawable(placeHolderDrawable);
}
});
}
問題は、画像が正しく読み込まれているが、画像が読み込まれた後に imageView が更新されないことです。OnImageLoaded では、私は UI スレッドにいないため、ビューを更新しません。だから私は何でも試しました:
- 実行可能
- 非同期タスク
- ( http://developer.android.com/training/displaying-bitmaps/process-bitmap.html#concurrency )からの Android ソリューション
スレッドが混乱しているようです。
Picasso-Target 内で Picasso を呼び出す際に問題があるのでしょうか?
何か提案はありますか?
グリーツとthx