列表活动中的Asynctask

时间:2011-05-17 17:11:59

标签: android android-asynctask

我有一个listactivity,每行都有一个不同的图像,我从网络和一些文本加载。 我想实现asynctask所以图像会加载到背景上。 我搜索了很多教程,但没有发现每行使用不同的图像。问题是应该从互联网加载图像的方法doInBackground。但是因为它们都是不同的并且它们依赖于它的行,所以线程如何加载它们?

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

在我的getView方法中,我有

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

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

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

谢谢, 丽塔

3 个答案:

答案 0 :(得分:2)

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

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

另一方面,枯燥的方法是打破HttpClient并手动下载图像,然后使用BitmapFactory.decodeStream方法创建Bitmap

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

不幸的是,在许多实现中,运行AsyncTasks的ExecutorService仅限于使用一个Thread。这给List带来了一个不幸的感觉,其中图像逐个加载,而不是你可能期待的尽可能多的一次感觉。

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

我不是AsyncTask的忠实粉丝,你可以说。

上面是这样一个常见的任务,并且这样烦人的事情要做对,我非常推荐使用别人的库。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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