我有一个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给了我这个位置。
有没有人知道如何解决这个问题?
谢谢, 丽塔
答案 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)