gpt4 book ai didi

android - Android ListView 中的图像(来自网络)总是在出现时重新加载

转载 作者:搜寻专家 更新时间:2023-11-01 09:09:04 26 4
gpt4 key购买 nike

我有一个 ListView,它包含一个从 Web 链接(例如 http://www...image.jpg)创建的图像列表,其指令为:

Drawable d = LoadImageFromUrlWeb(TopTen_LinkImg);
imageTopTenView.setImageDrawable(d);

我已经创建了一个自定义的 ArrayAdapter(既简单又优化了“持有人”相同的结果)。

问题是出现在显示器上的每张图片都是从网络上传的,浏览页面列表是不可能的(太慢了)。

有一个代码将永久图像分配给 ImageView

代码是:

public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.row_top_ten, null);
ImageView imageTopTenView = (ImageView)rowView.findViewById(R.id.imageTopTen);
String TopTen = (String)ArrayDatiTopTen.get(position);
String[] ArrayTopTen=TopTen.split(",");
String TopTen_LinkImg=(String)ArrayTopTen[0];
Drawable d = LoadImageFromUrlWeb(TopTen_LinkImg);
imageTopTenView.setImageDrawable(d);
return rowView;
}

也许解决方案是使用编程代码填充 listView:

ListView listView=(ListView) findViewById(R.id.listView);
...
listView.addView(...)
...

已解决

我已经解决了创建一个 Drawable 数组并在 ArrayAdapter 中使用之前用图像填充这个数组的问题

// Define:
Drawable imageCache[]=new Drawable[100];

然后:

//loop to popolate array
imageCache[ct]=LoadImageFromUrlWeb(Link);

ArrayList 我使用:

...
imageTopTenView.setImageDrawable(imageCache[position]);
return rowView;
...

从 url 字符串到 drawable:

private Drawable LoadImageFromUrlWeb(String url)
{
try
{
url=url.replaceAll(" ", "%20");
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
}
catch (Exception e)
{
Log.w("LoadImageFromUrlWeb",e.toString());
return null;
}
}

最佳答案

Brett 的回答只是解决方案的一半,是的,图像下载应该异步完成,但由于 ListView 的优化,每次滚动 ListView 时,您最终都会一遍又一遍地重复下载相同的图像。

它会重复使用 View ,因此即使您下载并设置了图像,如果您向下滚动多个项目, View 将被重复使用,并且当您向上滚动时必须再次下载图像。

为了防止这种情况,您还需要图像缓存。参见 this post在安卓开发者博客上。

令人高兴的是,博客上的代码同时提供了异步图像下载和图像缓存。源代码可以从here获得

(注意:您需要对源代码稍作改动)

将第 58 行从

private Mode mode = Mode.NO_ASYNC_TASK;

private Mode mode = Mode.CORRECT;

关于android - Android ListView 中的图像(来自网络)总是在出现时重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9693818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com