我正在开发一个带有listView的Android应用程序,我正在优化它。它在一个活动中使用自定义游标适配器,我注意到bindview()为列表的每一行触发了两次。在这里研究BindView()和NewView()方法时,我在帖子中读到,对于listview的宽度使用Wrap_Content是一个坏主意。我把它切换到Fill_Parent和中提琴现在bindview()和newview()每个只为每个项目触发一次。
这样我可以更好地理解Andorid操作系统的内部结构,我想知道为什么Wrap_Content导致bindview()多次触发。
我在谷歌,Android开发人员文档上进行了多次搜索,但没有运气。
非常感谢任何回复。
谢谢, 乔治
答案 0 :(得分:10)
如果我从Google I / O的视频中正确回想起来,将ListView
的宽度(或高度)设置为wrap_content
将会导致它测量前3个项目并将其维度缩小那些。为了测量前3个项目,必须调用bindView()
来填充它们。一旦测量完毕,它将完全填充,并在前3个和后续任何一个上再次呼叫bindView()
。
这是因为ListView
仅在内存中保留了列表中可能包含无限数量项目的内容。它不是为wrap_content
设计的,因为它可能永远停留在绘图阶段。