web-dev-qa-db-ja.com

グライドリスナーが機能しない

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内で実行されますが、onLoadClearedonLoadFailedおよびonResourceReady内では実行されません。 。

33

それが見えないか、なくなっている場合、それはImageViewの可視性のバグのようです。ここで問題を開きました: https://github.com/bumptech/glide/issues/618

30

これを行う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()
13

同じ問題に遭遇しました。 onResourceReadyがfalseを返すようにすると、私にとってはうまくいきませんでした。

5
Rik van Velzen

onResourceReadyonLoadFailedの戻り値をtrueからfalseに変更するだけです。

glide 4.9.1

requestListenerのコメントを見れば、理解できるはずです。

2
Mehdi Yari

ImageViewの幅と高さが0,0だったため、同じ問題が発生しました。 ImageViewにデフォルトの幅と高さを与えて、問題を解決しました。

2
m3g4tr0n