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() 没有被调用

listview 项目未在自定义适配器的 getview 方法中显示分配的值

关于listview适配器getview的详细说明

1.0 listview的adapter中getview的三种写法

android 分享一个处理BaseAdapter,getView()多次加载的方法