web-dev-qa-db-fra.com

L'écouteur Glide ne fonctionne pas

J'utilise Glide pour charger des images et j'ai ajouté un écouteur pour savoir quand la ressource est prête ou s'il y a eu une erreur de n'importe quel type:

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);

L'application ne s'exécute jamais à l'intérieur de onResourceReady ou onException mais si je supprime l'écouteur et laisse le téléchargement asynchrone sans rappel, il s'exécute correctement:

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);

J'ai également essayé avec GlideDrawableImageViewTarget au lieu de l'écouteur de recevoir des rappels mais l'application s'exécute à l'intérieur onLoadStarted mais ne s'exécute jamais à l'intérieur onLoadCleared, onLoadFailed et onResourceReady .

33
Giorgio Antonioli

Cela semble être un bug avec la visibilité d'ImageView si elle est invisible ou disparue. J'ai ouvert un problème ici: https://github.com/bumptech/glide/issues/618

30
Giorgio Antonioli

Voici une façon de procéder:

        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
android developer

Ran dans le même problème. Avoir onResourceReady renvoyer false a fait l'affaire pour moi.

5
Rik van Velzen

Il vous suffit de changer le retour de onResourceReady et onLoadFailed de true à false.

Cela fonctionne pour moi sur glide 4.9.1.

si vous regardez les commentaires de RequestListener, vous devez comprendre.

2
Mehdi Yari

Ran dans le même problème, car la largeur et la hauteur de mon ImageView étaient 0,0. A donné à mon ImageView une largeur et une hauteur par défaut, cela a résolu mon problème.

2
m3g4tr0n