android - 当在 ListView 中滚动更新数据更改为以前的数据

标签 android listview adapter

在 ListView 中,我有图像、文本和包含默认图像的图像,在图像上我有一个下载按钮。当列表加载并下载完成时,一切正常,但是当我滚动 list-view 时,图像只是变成了静态图像。

最佳答案

发生这种情况是因为在 ListView 中, View 被回收。一旦你滚动,显示出来的 View 就会被回收并在另一行中重复使用,从而导致图像困惑等......

您必须在适配器中使用 ViewHolder 模式来处理此问题。将您所有的 View 添加到您的 viewholder 对象并使用它们来设置图像、文本等...这将停止您想要的效果。

参见:https://dzone.com/articles/optimizing-your-listview教程

另见:https://developer.android.com/training/improving-layouts/smooth-scrolling.html从谷歌获取详细信息。

注意:如果您从 Internet 下载图像,则需要缓存机制或使用 Picasso、Fresco... 或此类库来处理缓慢收敛到正确图像的问题。

我建议图书馆的原因如下:

1) 当你滚动时,图像将再次进入网络下载,同时你的静态占位符将出现。下载您的图像需要一段时间。此外,除非您实现自己的自定义缓存机制,否则它将始终去下载图像。

2) 当您滚动时,即使 View 不在显示范围内,您生成的下载线程也会继续运行。

3) 我提到的库会自行处理缓存...当您的 View 离开屏幕时它们会取消请求...它们会自行处理垃圾回收...

关于android - 当在 ListView 中滚动更新数据更改为以前的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694492/

相关文章:

Android - 在进度条的中心显示文本

Android : TabActivity or Fragment? 什么时候用Tabs,什么时候用Fragments?

android - onClick 事件不适用于 android 中的嵌套 ListView 项控件

android - 查看寻呼机和 ListView

android - RecyclerView.Adapter 中 getItemId() 的正确实现方式

android - 具有包装内容项水平和垂直滚动的回收器 View

Android Webview 使用自签名证书

android - android中服务和广播接收器之间的区别

java - 如何更改按钮图像,如切换按钮 RecyclerView 按钮以编程方式单击

design-patterns - 不使用接口(interface)的适配器模式