Glideを使用して画像をロードし、リソースの準備ができたとき、または何らかのタイプのエラーが発生したかどうかを知るためにリスナーを追加しました。
Glide.with(mContext)
.load(url)
.placeholder(R.drawable.glide_placeholder)
// use dontAnimate and not crossFade to avoid a bug with custom views
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
// do something
return true;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
// do something
return true;
}
})
.into(mCustomImageView);
アプリはonResourceReady
またはonException
内で実行されることはありませんが、リスナーを削除し、コールバックなしで非同期ダウンロードを許可すると、正しく実行されます。
Glide.with(mContext)
.load(url)
.placeholder(R.drawable.glide_placeholder)
// use dontAnimate and not crossFade to avoid a bug with custom views
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(mCustomImageView);
コールバックを受信するためにリスナーの代わりにGlideDrawableImageViewTarget
も試しましたが、アプリはonLoadStarted
内で実行されますが、onLoadCleared
、onLoadFailed
およびonResourceReady
内では実行されません。 。
それが見えないか、なくなっている場合、それはImageViewの可視性のバグのようです。ここで問題を開きました: https://github.com/bumptech/glide/issues/618
これを行う1つの方法を次に示します。
Glide.with(context).load(...)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
//TODO handle error images while loading photo
return true
}
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
//TODO use "resource" as the photo for your ImageView
return true
}
}).submit()
同じ問題に遭遇しました。 onResourceReadyがfalseを返すようにすると、私にとってはうまくいきませんでした。
onResourceReady
とonLoadFailed
の戻り値をtrueからfalseに変更するだけです。
glide 4.9.1
。
requestListenerのコメントを見れば、理解できるはずです。
ImageViewの幅と高さが0,0だったため、同じ問題が発生しました。 ImageViewにデフォルトの幅と高さを与えて、問題を解決しました。