我在我的应用程序中有一个Android ListView,并在每行中显示不同的图像(每行1个图像,高度不确定)。这些图像使用AsyncTask从网络加载,否则它会从缓存中获取,所以一切都很好。
过程是,在我的适配器的每个getView中(除非在缓存中找到)我都有一个指向图像的url,我启动一个异步任务来设置我的ImageView。我给它一个定义的宽度,以适应屏幕(然后我使用这个定义的宽度来缩放高度,所以我知道宽度但在下载和设置之前不知道高度(或图像的纵横比))
向下滚动时一切正常,因为List View预加载了大约5行..它会在我的代码中触发5次调用以下载图像。这使得向下滚动平稳。
问题在于当我向上滚动时。当我向上滚动时,视图被重用,我知道一个宽度,所以没问题,但最初高度为0,直到我完全加载图像;当它完全加载时,Image View会扩展到任何高度(即1024),这会使滚动变得不流畅,因为它将视图从0扩展到1024并将焦点带回该视图的顶部...
问题:是否可能将List View设置为预加载向下和向上到一定大小..?因此,向上滚动时,我的ListView已准备好显示5行。我知道这在android.support.v4.view.ViewPager中是可能的(默认情况下它预加载+1和-1..但可以更改为+5和-5)。
过程是,在我的适配器的每个getView中(除非在缓存中找到)我都有一个指向图像的url,我启动一个异步任务来设置我的ImageView。我给它一个定义的宽度,以适应屏幕(然后我使用这个定义的宽度来缩放高度,所以我知道宽度但在下载和设置之前不知道高度(或图像的纵横比))
向下滚动时一切正常,因为List View预加载了大约5行..它会在我的代码中触发5次调用以下载图像。这使得向下滚动平稳。
问题在于当我向上滚动时。当我向上滚动时,视图被重用,我知道一个宽度,所以没问题,但最初高度为0,直到我完全加载图像;当它完全加载时,Image View会扩展到任何高度(即1024),这会使滚动变得不流畅,因为它将视图从0扩展到1024并将焦点带回该视图的顶部...
问题:是否可能将List View设置为预加载向下和向上到一定大小..?因此,向上滚动时,我的ListView已准备好显示5行。我知道这在android.support.v4.view.ViewPager中是可能的(默认情况下它预加载+1和-1..但可以更改为+5和-5)。
RecyclerView
的博客文章。(a)无论如何,这可能对你有兴趣,(b)它提到了处理类似用例的ViewHolder
模式。 - Jan Groth