在ListView中解释convertView和View Holder Pattern的个别角色

时间:2017-05-27 14:16:00

标签: android listview android-viewholder convertview

有人能解释一下convertView和View Holder Pattern在ListView中的个别角色,以及它们如何提高listview的效率?

F11

2 个答案:

答案 0 :(得分:0)

SO中有很多帖子。 但简而言之,它是关于重用ListView中的对象而不是实例化新的对象。 在ListView中,屏幕上有固定数量的项目。因此,当一个新项目从底部进入时,当一个新项目进入时,前一个项目将从顶部消失。

因此convertview将是存储正在消失的数据的对象,您可以重复使用它来存储新的传入数据。

如果converView为null,则需要创建一个新视图来存储传入数据。如果它不为null,则可以将其重新用于新数据,而不是创建新视图。

答案 1 :(得分:0)

  • convertView

这是一个先前已经膨胀的视图(当convertView==null时)并且在屏幕上,但现在已经滚出屏幕,因此您可以重新使用它来显示将进入的视图中的数据屏幕很快。

通过减少视图通胀(调用inflater.inflate非常昂贵)来提高性能,减少垃圾收集并减少内存分配。

  • 查看持有人

直接引用您的观点。

可能会提高性能,因为findViewById是围绕视图层次结构的for循环,可能会占用UI线程非常宝贵的时间。这种改进可能很小,但在快速滚动列表中,每纳秒计算得到一个很好的平均值60fps。