0

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

那么有没有办法纠正它,当我向下滚动时,我应该能够获得图像位图并在我向下滚动时设置位图。我希望它与 twitter 应用程序完全一样,我在加载个人资料图片时看不到延迟。

TIA

4

3 回答 3

0

如果你在 getView() 方法中调用你的 web 服务,它会在你每次上下滚动时被调用。由于为屏幕上可见的行调用了 getView 方法。

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

当然已经有人做了这样的适配器,只是在这里搜索我发现了这个SO question,其中有一个答案是指 CommonsWare无尽的适配器

于 2012-12-04T07:07:17.623 回答
0

好吧,您的方法不正确,您必须先获取所有图像,然后再将它们显示为每次滚动列表时调用的获取视图,因此每次调用服务并获取编号时。列表可以在屏幕上显示的图像数量(例如一次 4-5 个)。

您要做的是:- 1)获取所有图像。2)当您将所有图像集适配器获取到 listview 时,您将在列表中立即拥有所有图像,因为您已经下载了图像,

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

希望这会有所帮助

于 2012-12-04T06:26:43.207 回答
0

有一个名为 AALP 的库,您可以使用它来帮助您延迟加载列表视图。https://bitbucket.org/zedvoid/aalp/src 希望这可以为您节省一些时间和精力。

于 2012-12-04T16:47:35.870 回答