ListView 的 getView() 方法啥时候调用?
Posted
技术标签:
【中文标题】ListView 的 getView() 方法啥时候调用?【英文标题】:When is the getView() method of ListView called?ListView 的 getView() 方法什么时候调用? 【发布时间】:2011-10-28 15:49:32 【问题描述】:我正在处理ListView
。我想知道何时调用 getView()
。设置适配器后是否调用它?一旦getView()
方法完成执行,是否会调用“设置适配器”旁边的行?
请帮助我知道getView()
完成执行后哪一行被执行。
这对我很有帮助。
提前致谢, 毗湿奴
【问题讨论】:
【参考方案1】:getView()
为您传递给适配器的列表中的每个项目调用。
设置适配器时调用它。当getView()
完成时,调用setAdapter(myAdapter)
之后的下一行。
为了调试getView()
,您必须在其上切换断点,因为您无法从setAdapter(myAdapter)
进入getView()
。
getView()
在notifyDataSetChanged()
之后和滚动时也会被调用。
【讨论】:
感谢您的快速响应当我在 getView() 方法中为变量设置一些值时。当我在 setAdapter() 方法旁边的行中打印它们时,它们仍然显示为零。这些变量可以访问完整的 Activity。你能帮忙吗 嘿。一旦 getView() 被执行,控件就不会返回到 setAdapter() 旁边的语句。实际上,一旦调用了setAdapter(),控件并没有直接转到getView(),几乎所有的语句都被执行,然后控件移动到getView()。我真的对这种行为感到困惑。请帮忙。 嗨。这意味着,如果我在列表视图中显示 100 个项目,那么 getView() 方法将被调用 100 次?【参考方案2】:更清楚地说,每当屏幕上显示新项目时,都会调用 getView(),以显示项目的计数。这意味着,如果您有 100 万个项目,但其中 15 个适合屏幕,则 getView 会被调用 15 次。每当您向上/向下滚动并出现新项目时,都会调用 getView() 来获取新项目。你也应该了解回收机制。它为每个项目类型保存一个模板项目布局,并将此视图作为 convertView 参数发送到 getView() 方法,因此您可以使用它来防止布局膨胀。
【讨论】:
嗨...所以,当我向下滚动时,getView() 方法会为每个对用户可见的列表项调用?此外,如果最初一次只能在移动屏幕上看到 10 个项目,那么在开始时 getView() 方法会被调用 10 次?我的想法正确吗? ...谢谢。 每次调用 getView() 时都是 convertView == null 吗? 没有。如果先前填充了相同项目类型的模板,则回收器将此引用作为 convertView 参数传递。您应该检查 null 并在它不为 null 时使用它。 如果我想调用getView()
,即使项目不适合屏幕。怎么办?以上是关于ListView 的 getView() 方法啥时候调用?的主要内容,如果未能解决你的问题,请参考以下文章
Listview 没有被填充,getView() 没有被调用
listview 项目未在自定义适配器的 getview 方法中显示分配的值