0

我在我的应用程序(twitter类应用程序)中实现了图像(从远程服务器)的延迟加载,并且将图像加载到精确的imageView中工作得很好。但是,只有在向下滚动ListView并从远程服务器(我通过在适配器“getView”代码中执行asyntask获取图像)获取图像后,才会调用适配器的“getView”部分。看到正在加载的图像有相当数量的延迟。一旦图像加载并存储在内存缓存中,滚动向上或向下滚动就没有问题了。唯一的问题是图像加载第一次加载缓慢在LIstView中加载非常缓慢的图像

所以有一种方式来纠正它的方式,当我向下滚动时,我应该能够获得图像位图和设置位图时我向下滚动。我希望它完全像Twitter应用程序,在加载个人资料照片时看不到延迟。

TIA

回答

0

嗯,你的做法是不正确你必须向他们展示之前,所有图像获取为得到视图称为每次滚动列表,以便您的每一次服务被调用,并获取无。列表可以在屏幕上显示的图像(每次说4-5)。

你需要做的是: - 1)获取所有图像。 2)当你获取的所有图像设置适配器的ListView,你会在你的列表中的所有图像,无需等待,你已经下载的图像,

但是,这不是懒加载 - 延迟加载意味着用户如果他不滚动,那么一次只能看到图像的一部分,没有意义从服务中下载图像。

希望如果你调用在getView()方法的web服务,将有助于

+1

感谢您的回复。我的应用程序就像一个twitter应用程序,我可以抓取10个提要,并在用户向下滚动时继续提取。所以我只会在滚动 – Jagadeesh

+0

时得到图片Url,如果你一部分地抓取图片,你不能忽略图片的下载时间,这是造成getview延迟的原因。在将它们传递给适配器之前,您必须先获取所有图像。 –

+0

不完全是,您也可以加载位置+ 10图像并缓存它们,以便向下滚动将显示这些图像,同时还会导致图像位置+ 10下的新webservice调用。检索所有图像在很多情况下效率都不高,比如在Twitter中,列表几乎是无穷无尽的。看到我的答案。 – NickL

0

,它会被称为每次上下滚动时间。由于getView方法是针对屏幕上可见的行调用的。

你可以做的是将图像加载到HashMap<int, Object>,其中int ==在listview中的位置,object是图像。在getview中,你可以检查位置+(1 - > 10)是否已经被加载,如果没有,在某种后台任务中从web服务中检索它们。 加载hashmap中的图像,并使getView()方法使用这些图像。不是从web服务直接检索的图像。否则,你确实需要等待它们被检索。这种方式也可以将图像缓存在hashmap中,而不是在上下滚动时反复检索相同的图像。

当然,已经有人制作了这样的适配器,只是通过在这里搜索它,我发现了this SO问题,其答案指的是CommonsWare endless adapter