我的应用程序中有一个Android ListView,我在每行显示不同的图像(每行1个图像,未定义的高度)图像是使用AsyncTask从网上加载的,否则它会从缓存中提取,所以这就是全部细
进程是,我有一个图像的url,在我的适配器的每个getView中(除非在缓存中找到)我触发了一个异步任务来设置我的ImageView图像。我给它一个定义的宽度,以适应屏幕(我然后使用这个定义的宽度来缩放高度,所以我知道宽度,但在下载和设置之前不知道高度(或图像的纵横比))< / p>
向下滚动时一切正常,因为列表视图预加载了5行......它会在我的代码中触发5次调用以下载图像。这使得滚动顺利。 问题是当我向上滚动时。当我向上滚动时,视图会重复使用,我知道宽度可以,但最初高度为0,直到我完全加载图像;当它被完全加载时,图像视图会扩展到任何高度(即1024),这会使滚动变得不稳定,因为它将视图从0扩展到1024并将焦点重新带回到该视图的顶部...
问题:是否可以将列表视图设置为预先加载向下滚动到一定大小..?因此,当向上滚动时,我的ListView已准备好显示5行。我知道这可以用android.support.v4.view.ViewPager(默认情况下预加载+1和-1 ..但是可以改为+5和-5)
答案 0 :(得分:0)
根据我的理解,我认为您应该在适配器中覆盖newView
,而不是getView
,扩展BaseAdapter
。别忘了给super.newView
打电话。
原因是当您向上滚动时避免绑定视图(行)。方法newView
被调用一次,每行只调用一次。并且getView
还会绑定视图,当您向上滚动时会再次加载图像。如果我没记错的话,我认为这是一个问题。
当然,只有在你加载图像后,图像才会发生变化,这才有意义。如果图像应该动态变化,在向上和向下滚动时,我猜你会被卡住,但我怀疑是这样的。我认为你不会保存旧/丢弃图像的高度。