Подтвердить что ты не робот

Слушатель Glide не работает

Я использую 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.

4b9b3361

Ответ 1

Кажется, это ошибка с видимостью ImageView, если она невидима или ушла. Я открыл здесь проблему: https://github.com/bumptech/glide/issues/618

Ответ 2

Вот один из способов сделать это:

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

Ответ 3

В один и тот же вопрос. Имея onResourceReady return false помогло.

Ответ 4

Столкнулся с той же проблемой, потому что ширина и высота моего ImageView были 0,0. Дали моему ImageView ширину по умолчанию и Высоту, это решило мою проблему.

Ответ 5

Вам просто нужно изменить возврат onResourceReady и onLoadFailed с true на false.

У меня на glide 4.9.1.

если вы посмотрите на комментарии RequestListener, вы должны понимать.