在列表视图中,我有图像,文本和图像包含默认图像,在图像上我有一个下载按钮。当列表加载下载完成时,每件事情都运行正常但当我滚动列表视图时,图像刚刚更改为静态图像。
答案 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);
}
}