在列表视图中滚动时滑动重新加载内容

Glide reload content on scrolling in listview

我正在使用 glide 加载内容,我使用它在页面中加载 1 个图像,如果我关闭并重新打开我的应用程序,它工作正常。问题是当我在 listview 上使用它时,glide 总是重新下载它。
详细错误步骤:

  1. 从服务器加载内容后,所有图像显示正常
  2. 然后我向下滚动,新内容也显示正常
  3. 当我向后滚动时,所有图像都消失了,但在 1 秒后我的图像再次出现,因为滑行加载它就像滑行之前从未加载它一样。
  4. 如果我有纵向方向,第一次加载时,它将填满布局宽度,但第二次(向后滚动列表视图)图像看起来更小而不是全宽。

这是我截取的代码

View view = convertView;
if (null == view) {
    view = View.inflate(parent.getContext(), R.layout.item, null);
}

ImageView ivAvatar = (ImageView) view.findViewById(R.id.iv_avatar);
ImageView ivPicture = (ImageView) view.findViewById(R.id.iv_picture);
TextView tvName = ....
...
tvName.setText(.....);  

Glide.with(parent.getContext()).load(Api.getUrlImage(contents.get(position).avatar, 50, 0)).into(ivAvatar);
Glide.with(parent.getContext()).load(Api.getUrlImage(contents.get(position).picture, 400, 0)).into(ivPicture);

在第 3 点,它就像一个闪烁,但图像视图失去了它的高度。图像下方的文字上升(就像那里没有图像视图)然后在滑动完成加载图像后返回
在第 4 点,我的屏幕分辨率是 480 像素,我加载了 400 像素的图像(由服务器调整大小),如第二个滑动代码所示。

my question, how to remove this blinking image?

*i 运行 这在低规格设备和高规格设备 (samsung tab s) 上都会发生,并且在两个设备上都会闪烁

尝试使用 dontAnimate() 看看是否能解决问题?

如果问题依然存在,那是因为Glide为了加载后面的图片,释放了前面图片的资源。

如果您要在滚动列表中加载大量图像并且需要支持低规格设备,fresco 是更好的选择。 http://frescolib.org/index.html 它使用本机内存并具有更好的位图资源管理,尤其是对于 5.0 之前的 Android 设备。

在你的适配器onCreateView方法中使用 glide 之前尝试使用 if

像这样

if (yourImageView.getDrawable() == null)
// load your image 

所以如果图像已经加载,该方法不会 return null