0

我有一个 ListView,它显示一个项目列表,每个项目都有一个图标和一些文本。

我正在使用 ListAdapter.getView() 方法的“convertView”参数,在参数为非空时更改现有视图而不是创建新视图。

我曾期望 ListView 仅在它们滚动出可见视口后才能回收旧视图,但情况似乎并非如此。似乎 ListView 在每次调用 ListAdapter.getView() 时的“convertView”参数中提供了相同的对象。单个视图被渲染到屏幕上,然后在下一次调用 getView() 时再次发送。

这对我来说是一个重大问题,因为我希望修改以前渲染的视图。我有一个后台线程来检索项目的图标,这需要“相当长”的时间,并且在 ListAdapter.getView() 视图呈现代码中放置的用户界面负担是不可接受的。

有没有办法让 ListView 不重用当前显示在屏幕上的视图?我想实现视图重用的性能/效率增益,并能够在后台线程中加载图标。

4

2 回答 2

0

我认为您有一段时间遇到过类似的问题:回收时在列表视图或网格视图中可见一段时间的旧项目

您必须在 getView() 的开头“重置”列表的回收项。将它们设置回进度条或不可见,无论初始状态是什么。直到他们获取正确的数据。

于 2012-09-04T01:32:57.380 回答
0

我发现问题在于 Android 正在创建一个额外的、从未渲染过的临时视图,用于在某些条件下进行布局/测量。我认为这个视图被渲染到屏幕上的假设是不正确的。

于 2012-11-29T11:08:58.213 回答