gpt4 book ai didi

java - Android - 延迟加载图像到 ListView 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:14 28 4
gpt4 key购买 nike

这是一个非常常见的场景:在 ListView 中显示必须从 Internet 下载的图像。

现在我有一个 ArrayAdapter 的自定义子类,用于 ListView。在 ArrayAdapter 的 getView() 实现中,我生成了一个单独的线程来加载图像。加载完成后,它会查找合适的 ImageView 并使用 ImageView.setImageDrawable() 设置图像。所以我使用的解决方案有点类似于这个:Lazy load of images in ListView

我遇到的问题是,只要我在 ImageView 上调用 setImageDrawable(),ListView 就会以某种方式刷新列表中所有当前可见的行!这导致了一种无限循环:

  1. 调用 getView()
  2. 生成线程以加载图像
  3. 图像已加载;在 ImageView 上调用 setImageDrawable()
  4. ListView 出于某种原因拾取它并自行刷新
  5. 为了刷新 ListView,会为每个可见行调用 getView(),因此我们返回到步骤 1,整个过程会自行重复

据我所知,“Android - 如何在 ListView 中延迟加载图像”(参见上面的链接)中提出的解决方案根本行不通。它可能看起来像,但它会运行得非常慢,因为在后台,它会不断重新加载当前可见的行。

有没有人以前遇到过这个问题和/或对此有解决方案?

最佳答案

我使用了以下链接中的代码:another stackoverflow question

为了解决回收 View 问题,我做了一些小改动。我在适配器中将图像的 url 设置为 ImageView 的标签。以下代码包含我解决回收问题的解决方案:

public void fetchDrawableOnThread(final String urlString, final ImageView imageView,Drawable drw) {

imageView.setImageDrawable(drw);//drw is default image
if (drawableMap.containsKey(urlString)) {
if(imageView.getTag().toString().equals(urlString))
{
imageView.setImageBitmap(drawableMap.get(urlString));
imageView.invalidate();
return;
}

}

final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
BitmapWrapper wrapper = (BitmapWrapper)message.obj;
if(wrapper.imageurl.equals(imageView.getTag().toString()))
{
imageView.setImageBitmap((Bitmap)wrapper.bitmap);
imageView.invalidate();
}

}
};

Thread thread = new Thread() {
@Override
public void run() {
//TODO : set imageView to a "pending" image

Bitmap drawable = fetchDrawable(urlString);
BitmapWrapper wrapper = new BitmapWrapper();
wrapper.bitmap = drawable;
wrapper.imageurl = urlString;
Message message = handler.obtainMessage(1, wrapper);
handler.sendMessage(message);
}
};
thread.start();
}


public class BitmapWrapper
{
public Bitmap bitmap;
public String imageurl;
}

关于java - Android - 延迟加载图像到 ListView 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1409623/

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