Android - 滚动时,图像出现故障并加载到回收站视图中的另一个项目(来自 api 的图像为空或空图像)

问题描述 投票:0回答:1

我正在尝试使用 Paging 3 库(使用协程)加载 api 数据,它已成功加载并显示在回收站视图中。问题是 - 具有显示图像的图像 url 的项目(使用 Glide)和具有 null 或空图像 url 的项目显示占位符。但是当我向下滚动并再次向上滚动时,图像搞砸了。具有空图像 url 的项目也显示来自其他位置的图像。

假设 ,有一个包含 100 个项目的列表。其中 30 个项目有图像,其他有 null。 当我上下滚动多次时。 ....等等,回收站视图中的所有项目都会显示图像。

我还以正常方式进行了测试 - 刚刚通过改造调用 api 并响应 body(),我在没有任何库(Mvvm、协程等)的情况下更新适配器中的数据,这是较旧的方式。但是结果还是一样。

 Glide.with(context)
.load(rideData.driver.image_with_url)
.placeholder(R.drawable.placeholder)
.circleCrop()
.into(imgMovie) 

有人可以帮我吗!*

android kotlin android-recyclerview android-glide android-paging-3
1个回答
0
投票

不确定,但可能是缓存问题,如果 url 为 null,则会出现问题。您可以通过在 imageView src 中添加占位符在编译时解决它,如果 url 不为空,它将在运行时用您的 url 替换它:

            <ImageView
                ...
                android:src="@drawable/placeholder" />

但是该方法可能会导致您在加载应用程序时首先看到占位符并替换为 url。相反,您可以检查 url 是否为空,如果为空,则将其源设置为您的占位符图像。避免使用 glide 的占位符。

if (yourUrl != null) {
    Glide.with(context)
         .load(rideData.driver.image_with_url)
         .circleCrop()
         .into(imgMovie) 
} else {
    Glide.with(context)
         .load(R.drawable.placeholder)
         .circleCrop()
         .into(imgMovie) 
}
© www.soinside.com 2019 - 2024. All rights reserved.