自定义列表视图适配器的 getView 方法:多次调用的深入分析
问题:
在自定义列表适配器中,为什么多次调用 getView 方法,貌似是在一个随意顺序?
答案:
由于 ListView 工作方式的固有性质,自定义列表适配器中的 getView 方法可以以任何顺序多次调用。以下是对所提供代码中观察到的行为的解释:
ConvertViews:
convertView 参数表示正在回收以供重用的视图。当convertView为非空时,表明ListView已经测量并膨胀了相应位置的视图。适配器不会创建新视图,而是重用此回收的视图。
getView 调用顺序:
对于不同位置调用 getView 的顺序没有保证。即使在收到用户输入之前,ListView 也可能会调用 getView 来获取多个位置。当 ListView 的高度设置为 wrap_content 时(如给定的 XML 布局中所示),此行为尤其常见。
为什么 getView 被多次调用:
getView 被调用由于 ListView 的测量过程,每个位置会被多次测量。当 ListView 首次显示时,它会测量适配器之外的几个子视图以确定其自身的高度。此测量过程会触发对列表可见部分的 getView 调用。
不可预测的 ConvertViews:
当用户滚动时,ListView 可能会回收不再可见的视图并将其重新用于新职位。这解释了为什么即使在用户滚动之前,convertView 参数也可以为非空。
结论:
虽然看起来不寻常,但调用 getView 的行为多次并且以不可预测的顺序不是问题。它是 ListView 如何通过重用视图并仅测量其初始布局的子级子集来优化性能的固有部分。
以上是为什么我的 ListView 的'getView”方法被多次调用,并且顺序明显是随机的?的详细内容。更多信息请关注PHP中文网其他相关文章!