当listview中的滚动更新数据更改为以前的数据

时间:2016-08-01 08:45:34

标签: android listview adapter

在列表视图中,我有图像,文本和图像包含默认图像,在图像上我有一个下载按钮。当列表加载下载完成时,每件事情都运行正常但当我滚动列表视图时,图像刚刚更改为静态图像。

2 个答案:

答案 0 :(得分:1)

这是因为在列表视图中,视图会被回收。滚动后,您的视图将不再显示,可以在另一行中重复使用,从而导致图像混乱......等等。

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

请参阅:https://dzone.com/articles/optimizing-your-listview了解教程

另请参阅:https://developer.android.com/training/improving-layouts/smooth-scrolling.html了解google的详细信息。

注意:如果您从互联网下载图像,您将需要一个缓存机制或使用Picasso,Fresco ......或此类库来处理慢速收敛到正确的图像。

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

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

2)滚动时,即使视图不显示,生成下载的线程也会继续运行。

3)我提到的库,自己处理缓存...当你的视图离开屏幕时它们取消请求....他们自己处理垃圾收集....

答案 1 :(得分:0)

滚动列表时,适配器类的getView方法再次触发。您应该每次检查您要显示的图片是否以getView方法下载。如果未下载,请保留静态图像,但如果下载成功则设置该图像。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
...

    if ("downloaded") {
        imageView.setImage("your image");
    } else {
        imageView.setImageResource(R.drawable.static_image);
    }
}