【问题标题】:Asynctask in listactivity列表活动中的异步任务
【发布时间】:2011-05-17 17:11:58
【问题描述】:

我有一个列表活动,每一行都有我从网络加载的不同图像和一些文本。 我想实现 asynctask,这样图像就会在后台加载。 我搜索了很多教程,但没有找到每行使用不同图像的教程。问题是应该从互联网加载图像的方法 doInBackground 。但是由于它们都是不同的并且依赖于它的行,那么线程如何加载它们呢?

全局变量:位图bm; BitmapFactory.Options bmOptions;

在我的 getView 方法中,我有

ImageView img = (ImageView) v.findViewById(R.id.icon); 如果 (img!=null){ bm = LoadImage(o.getLink(), bmOptions); img.setImageBitmap(bm); }

连同文本加载...这个 img 应该加载到 doInBackground 方法上,但是我无法访问我知道的 o(User 类型)对象,因为 getView 给了我位置。

有人知道如何解决这个问题吗?

谢谢, 丽塔

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    有两种方法可以做到这一点:简单的方法或无聊的方法。

    如果您可以添加额外的依赖项,那么我强烈建议您采取简单的方法并使用GreedDroid。您可以使用他们在那里的项目框架或使用AsyncImageView。我个人会使用后者。

    另一方面,无聊的方法是拆分HttpClient并手动下载图像,然后使用BitmapFactory.decodeStream方法创建Bitmap

    下载需要远离 UI 线程,因此使用AsyncTask 运行它可能感觉很自然,并使用 Handler 将位图实际插入ImageView(注意不要在已经被回收的视图上设置位图)。

    不幸的是,在许多实现中,运行 AsyncTask 的 ExecutorService 仅限于使用一个 Thread。这给列表带来了一种不幸的感觉,即一张一张地加载图像,而不是您可能期望的尽可能多的感觉。

    在这种情况下,您可能想要(基本上)推出自己的AsyncTask

    正如你所知,我不是AsyncTasks 的忠实粉丝。

    以上是一个很常见的任务,而且要正确处理是一件很烦人的事情,我非常推荐使用别人的库。

    【讨论】:

    • 嗨。我的问题是,我有自己的数组适配器,但每一行都需要有不同的图像,比如某人的个人资料图片及其用户名。问题是,我需要加载每张个人资料图片,但它不起作用。我尝试将一个字符串数组传递给后台线程,以便它知道每个图像的 url,但它无法访问每一行的 imageview。有什么想法吗?
    • stackoverflow.com/questions/2293488/…有一些很好的答案
    【解决方案2】:

    我相信您需要编写自己的列表适配器,以便随着越来越多的列表项被显示(例如通过向下滚动),适配器会创建更多的 AsyncTask 并在获取图像后显示它们。

    http://developer.android.com/reference/android/widget/ListAdapter.html

    【讨论】:

    • 嗨。我的问题是,我有自己的数组适配器,但每一行都需要有不同的图像,比如某人的个人资料图片及其用户名。问题是,我需要加载每张个人资料图片,但它不起作用。我尝试将一个字符串数组传递给后台线程,以便它知道每个图像的 url,但它无法访问每一行的 imageview。有什么想法吗?
    【解决方案3】:

    这是使用异步任务下载图像的地方,看看 http://developer.android.com/resources/articles/painless-threading.html

    【讨论】:

    • 嗨。我的问题是,我有自己的数组适配器,但每一行都需要有不同的图像,比如某人的个人资料图片及其用户名。问题是,我需要加载每张个人资料图片,但它不起作用。我尝试将一个字符串数组传递给后台线程,以便它知道每个图像的 url,但它无法访问每一行的 imageview。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多