为什么Wrap_Content不止一次地激活BindView

时间:2011-07-03 20:54:24

标签: android android-layout

我正在开发一个带有listView的Android应用程序,我正在优化它。它在一个活动中使用自定义游标适配器,我注意到bindview()为列表的每一行触发了两次。在这里研究BindView()和NewView()方法时,我在帖子中读到,对于listview的宽度使用Wrap_Content是一个坏主意。我把它切换到Fill_Parent和中提琴现在bindview()和newview()每个只为每个项目触发一次。

这样我可以更好地理解Andorid操作系统的内部结构,我想知道为什么Wrap_Content导致bindview()多次触发。

我在谷歌,Android开发人员文档上进行了多次搜索,但没有运气。

非常感谢任何回复。

谢谢, 乔治

1 个答案:

答案 0 :(得分:10)

如果我从Google I / O的视频中正确回想起来,将ListView的宽度(或高度)设置为wrap_content将会导致它测量前3个项目并将其维度缩小那些。为了测量前3个项目,必须调用bindView()来填充它们。一旦测量完毕,它将完全填充,并在前3个和后续任何一个上再次呼叫bindView()

这是因为ListView仅在内存中保留了列表中可能包含无限数量项目的内容。它不是为wrap_content设计的,因为它可能永远停留在绘图阶段。