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

Geo*_*ker 9 android android-layout

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

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

我已经在谷歌,Android开发者文档上进行了几次搜索,而且没有运气.

任何回应都非常感谢.

谢谢,乔治

Gle*_*ger 10

如果我从Google I/O的视频中正确回想起来,将a的宽度(或高度)设置ListViewwrap_content将导致它测量前3个项目并将其尺寸基于这些项目.为了测量前3个项目,必须调用bindView()它们来填充它们.一旦测量完毕,它将完全填充并bindView()再次呼叫前3个和后续任何一个.

这是因为ListView当列表中可能存在无限数量的项目时,屏幕上只保留内存中的内容.它不适用于wrap_content您最大的项目,因为它可能永远停留在绘图阶段.

  • 正确的,我昨天回答了类似的[问题](http://stackoverflow.com/questions/6557240/expandablelist-getchildview-running-twice-per-child/6557284#6557284).那里提供视频/时间. (2认同)