我发现 listView 回收它的视图太快了。
当我的 listView 滚动时,视图会从屏幕上掉下来立即被删除。
每个单元格(行)都有使用通用图像加载器加载的图像。
从屏幕上掉下来的视图在它们回到可见区域时必须重新加载图像。(它会在短时间内显示存根图像并加载正确的图像)。
我肯定需要保持视图回收行为,但我可以修改列表视图的行为,以便用户不会注意到不断重新加载图像吗?(也许我在缓存中保留了 2-3 倍的视图 # 比常规列表视图将)
我发现 listView 回收它的视图太快了。
当我的 listView 滚动时,视图会从屏幕上掉下来立即被删除。
每个单元格(行)都有使用通用图像加载器加载的图像。
从屏幕上掉下来的视图在它们回到可见区域时必须重新加载图像。(它会在短时间内显示存根图像并加载正确的图像)。
我肯定需要保持视图回收行为,但我可以修改列表视图的行为,以便用户不会注意到不断重新加载图像吗?(也许我在缓存中保留了 2-3 倍的视图 # 比常规列表视图将)
我可以建议您使用 ScrollView 而不是列表视图。ListView 旨在有效地显示大量数据,这就是您的屏幕外项目被破坏的原因。其中涉及滚动视图,一旦加载,您将能够上下滚动而无需重新创建屏幕外对象(因为它们不会被销毁)。
请参阅:http: //developer.android.com/reference/android/widget/ScrollView.html
编辑:
如果您必须使用 listView,您可以在这里查看:如何防止回收的 ListView 项目显示旧内容?
有可能覆盖 listView 的 getView 方法并保留更多的项目不被破坏,而不是 listView 保留的数量。
不幸的是,ListView 和朋友的代码非常复杂,因为它的设计目的是在不提前知道高度的情况下滚动大小不均匀的项目。这使得除了默认行为之外的任何东西都很难运行。此外,您需要访问以轻松自定义行为的大多数方法都是隐藏的或私有的。尝试滚动自己的工作将是一项艰巨的工作(跨多个平台,滚动的细微之处,投掷,拖动,滚动,键盘焦点等)。
最好的解决方案可能是维护一个图像缓存,该缓存会在活动的视图位置周围延迟填充。不一定容易。但是尝试弄乱 ListView 更容易。
A very useful API for this is ListView.setRecyclerListener(AbsListView.RecyclerListener listener), which gives you a hook to track which images are actively displayed.