Android 在listview中滚动时滑动重新加载内容

Android 在listview中滚动时滑动重新加载内容,android,image,android-glide,Android,Image,Android Glide,我使用glide加载内容,我使用它在一个页面中加载一个图像,如果我关闭并重新打开我的应用程序,效果会很好。问题是当我在listview上使用它时,glide总是重新下载它。 详细错误步骤: 从服务器加载内容后,所有图像显示正常 然后我向下滚动,新内容也显示正常 当我向后滚动时,所有图像都消失了,但1s后我的图像再次出现,因为glide将其加载回去,就像glide以前从未加载一样 如果我有纵向,第一次加载,它将填充布局宽度,但第二次(向后滚动listview)图像显示更小,而不是全宽 这是我截取的

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

  • 从服务器加载内容后,所有图像显示正常
  • 然后我向下滚动,新内容也显示正常
  • 当我向后滚动时,所有图像都消失了,但1s后我的图像再次出现,因为glide将其加载回去,就像glide以前从未加载一样
  • 如果我有纵向,第一次加载,它将填充布局宽度,但第二次(向后滚动listview)图像显示更小,而不是全宽
  • 这是我截取的代码

    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点,我的屏幕分辨率是480px,我加载了400px的图像(由服务器调整大小),如第二个滑动代码所示

    我的问题是,如何删除这个闪烁的图像

    *我在低规格设备和高规格设备(samsung tab s)上运行此功能,两个设备都会闪烁

    尝试使用dontAnimate(),看看它是否解决了问题

    如果问题仍然存在,那是因为Glide释放了先前图像的资源,以便加载后续图像


    如果您有很多图像要加载到滚动列表中,并且需要支持低规格设备,那么fresco是一个更好的选择。它使用本机内存,并且具有更好的位图资源管理,特别是对于5.0之前的Android设备。

    在适配器中使用glide in
    onCreateView
    方法之前,请尝试使用if

    像这样

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

    所以,如果图像已经加载,那么方法不会返回null,我只是尝试实现frescolib,根据需要工作。仅供参考,我认为在我的代码中关于图像高度的错误,直到读到这个@nameurname时才会离开之前加载的图像,这是错误的。视图保持架是重复使用的,无论视图保持架位于何处以及使用了哪些数据,都只能看到第一个加载的图像。@Sermilion当视图回收时,您可以从视图中删除图像,请显示onViewRecycled方法