我已经阅读了好几次关于 GetView DataAdapter 类的 android 文档。据我了解,如果我有一个同质列表,其中每个项目都只是一个文本视图,并且所有项目都落在屏幕内(不可能滚动),则不会有任何视图回收,所以我应该收到 4 次调用 GetView convertView 为空。好吧,这不是发生在我身上的事情。第一次 convertView 为空,但其他 3 个创建的项目相同。列表已正确填充,但我想了解为什么会发生这种情况。如果有人可以提供帮助,我将非常感激。
问问题
1013 次
1 回答
4
我相信 Android 总是试图回收视图,因为这将使填充速度最快。是否所有视图都适合列表的可见视口并不重要。膨胀/创建视图非常昂贵,这就是 Android 想要尽可能多地回收的原因。
您可以保证传递给 GetView 的视图将具有相同的视图类型(在数据适配器中定义)或为空。如果为 null,则需要为该视图类型创建一个新视图,否则应尝试重用传入的视图。对于 TextView 的同构列表,这非常简单:
if (convertView == null)
{
TextView tv = new TextView();
....
tv.setText("First Item");
}
else
{
TextView tv = (TextView) convertView;
...
tv.setText("Recycled Item");
}
为简单起见,您总是可以返回一个新视图而不是使用 convertView,但性能不会那么好。
于 2012-08-08T15:03:55.330 回答