我在 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)的安卓解决方案
看起来线程变得混乱或类似的东西。
在 Picasso-Target 中调用 Picasso 可能有问题?
你有什么建议吗?
问候和谢谢