You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Glide加载图片失败时如何保留ImageView原有默认图片不做操作

问题根源

Glide 调用into(ImageView)发起加载请求时,会在请求启动阶段第一时间清空ImageView上已有的Drawable,这个动作属于加载流程的前置默认逻辑,和onLoadFailed回调的返回值无关。即使你在onLoadFailed返回true表示自行处理加载失败逻辑,也无法阻止这个前置清空操作,这就是原有默认图消失的核心原因。

实现方案

不要直接把ImageView作为加载Target传入,改用自定义Target接管所有图片设置逻辑:仅在图片加载成功时手动给ImageView设置加载到的资源,其余加载阶段不对ImageView做任何修改,从根源上避免Glide改动ImageView上已有的默认图。

适用于Glide 4.x的实现代码:

Glide.with(myImageView.context)
    .load("目标图片地址")
    // 传入ImageView实际宽高,避免加载全尺寸图片浪费内存
    .into(object : CustomTarget<Drawable>(myImageView.width, myImageView.height) {
        override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
            // 只有加载成功才覆盖原有默认图
            myImageView.setImageDrawable(resource)
        }

        override fun onLoadCleared(placeholder: Drawable?) {
            // 空实现,不改动ImageView现有内容
        }

        override fun onLoadFailed(errorDrawable: Drawable?) {
            // 加载失败不做任何操作,保留默认图
            super.onLoadFailed(errorDrawable)
        }
    })
补充说明
  • 如果使用Glide 3.x版本,把代码中的CustomTarget替换为SimpleTarget即可,核心逻辑完全一致。
  • 禁止在onLoadCleared、onLoadFailed回调中执行任何修改ImageView图片资源的操作,避免覆盖原有默认图。
  • 不推荐使用「提前缓存ImageView的默认图,在加载失败时重新设置回去」的方案,该方案依赖Glide内部执行时序,配置placeholder、请求复用等场景下极易出现图片闪烁、覆盖错乱问题,稳定性远低于自定义Target方案。

内容的提问来源于stack exchange,提问作者GHH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:36:21