Android ListView 预加载行数据

标签 android listview

我的应用程序中有一个 Android ListView,我在每一行中显示不同的图像(每行 1 个图像,未定义高度)图像是使用 AsyncTask 从网络加载的,否则它会从缓存中提取它,仅此而已很好。

过程是,我有一个图像的 url,在我的适配器的每个 getView 中(除非在缓存中找到)我触发一个异步任务以使用图像设置我的 ImageView。我给它一个定义的宽度,以适应屏幕(然后我使用这个定义的宽度来缩放高度,所以我知道宽度但在下载和设置它之前不知道高度(或图像的纵横比))

当向下滚动时一切正常,因为 ListView 预加载了 5 行.. 它在我的代码中触发了 5 个下载图像的调用。这使得向下滚动变得顺畅。 问题是当我向上滚动时。当我向上滚动时, View 被重用,我知道宽度所以没关系,但最初高度为 0,直到我完全加载图像;当它完全加载时, ImageView 会扩展到任何高度(即 1024),这会使滚动变得不稳定,因为它将 View 从 0 扩展到 1024 并将焦点带回该 View 的顶部...

问题:是否可以将 ListView 设置为预加载向下和向上滚动到特定大小..?所以当向上滚动时,我的 ListView 有 5 行准备显示。我知道这可以通过 android.support.v4.view.ViewPager(默认情况下预加载 +1 和 -1..但可以更改为 +5 和 -5)

最佳答案

据我所知,我认为您应该在扩展了 BaseAdapter 的适配器中覆盖 newView 而不是 getView。不要忘记调用 super.newView

原因是为了避免向上滚动时绑定(bind) View (行)。方法 newView 对每一行调用一次且仅调用一次。 getView 还绑定(bind)了 View ,当您向上滚动时,它会再次加载图像。如果我没记错的话,我想这就是问题所在。

当然,这只有在加载图像后图像不变的情况下才有意义。如果图像应该在上下滚动时动态变化,我猜你被卡住了,但我怀疑情况是否如此。我想您不会保存旧图像/废弃图像的高度。

关于Android ListView 预加载行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349677/

相关文章:

c# - 当鼠标悬停在内部 ListView 上时,ListView 内的 WPF ListView 不滚动

android - 如何更改 CalendarView 中的月份文本颜色

java - iPhone有UITableView,android有什么

android - 无法使用 Espresso 将文本添加到 webview 文本字段

android - PGC map 但没有条目

asp.net-mvc - 如何将第一个项目设置为在 ListView kendoui中选择

android - Gson 在 Android Studio 调试器中运行缓慢

android - 使用带有文本和图像的自定义适配器在 ListView 中搜索

android - 如何在android中的 ListView 中将焦点设置在最后一个元素上

c# - ASP.NET 中的 List<T> 和 ListViews 的 Dictionary<T>