Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在listview中滚动时,更新的数据更改为以前的数据_Android_Listview_Adapter - Fatal编程技术网

Android 在listview中滚动时,更新的数据更改为以前的数据

Android 在listview中滚动时,更新的数据更改为以前的数据,android,listview,adapter,Android,Listview,Adapter,在列表视图中,我有图像,文本和图像包含默认图像,图像上有下载按钮。当下载完成后加载列表时,一切正常,但当我滚动列表视图时,图像刚刚更改为静态图像。这是因为在列表视图中,视图被回收。一旦你滚动,你的视图就会被回收,并在另一行重新使用,从而导致图像混乱等 您必须在适配器中使用ViewHolder模式来处理此问题。将所有视图添加到viewholder对象,并使用它们设置图像、文本等。。。这将停止您想要的效果 请参见:以获取教程 另请参阅:有关谷歌的详细信息 注意:如果你是从互联网下载图像,你要么需要一

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

这是因为在列表视图中,视图被回收。一旦你滚动,你的视图就会被回收,并在另一行重新使用,从而导致图像混乱等

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

请参见:以获取教程

另请参阅:有关谷歌的详细信息

注意:如果你是从互联网下载图像,你要么需要一个缓存机制,要么使用毕加索、弗雷斯科。。。或这样的库来处理缓慢收敛到正确的图像

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

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

2) 当您滚动时,您为下载生成的线程将保持运行,即使视图不显示


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

当您滚动列表时,适配器类的
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);
    }
}

一些代码可能会有帮助。我已经在共享链接中添加了我的代码,请查看。我不想使用任何库,我想自己创建。添加了viewholder模式,但它不能解决我的问题。我已检查了毕加索库,我的理解是,除非图像未完全下载,否则它将显示默认图像。但我希望,当我点击listview中的下载按钮,然后像whatsapp一样开始下载。默认情况下,您可以使用占位符图像集作为图像源。当您单击它时,运行asynctask或其他类似机制,并将此图像视图的引用作为弱引用传递,并在下载时进行设置……您能否详细说明如何添加占位符图像。