我试图在我的应用程序中使用自定义listView,并且我对其工作原理有一些疑问。当我实现自定义适配器时,它的方法(特别是getView方法)如何工作而不从任何其他类调用它们?
答案 0 :(得分:1)
当您将适配器设置为视图(例如ListView
或GridView
)时,该视图在某个时候想要显示一些项目。所以它在适配器中调用getView
:
getView(int position, View convertView, ViewGroup parent).
位置是列表/网格/等中项目的位置。 convertView
是一个循环播放的视图,可以通过之前的getView()
调用充气,如果尚未充气,则为空(请参阅此answer有关convertView和查看回收的信息。
父级用于对视图进行膨胀,因此可以相对于父视图计算正确的布局参数。
请注意,通胀缓慢。这就是存在convertView
机制的原因,以便回收视图,从而最大限度地减少通货膨胀的数量。接下来,查找视图(findViewById()
)也相对较慢。要改进这一点,请查看ViewHolder
pattern,它会在内存中保留对视图的引用,因此不必每次都搜索它们。
答案 1 :(得分:0)
我认为此链接可以帮助您。 getview是一个回调函数,当你在Activity上显示你的listview时会自动调用它。当您显示列表视图时,您将覆盖getview并从XML中膨胀您的行或动态创建您的行。您返回的那一行作为列表视图中显示的视图。
How does the getView() method work when creating your own custom adapter?
对于每一行,getview将被调用一次。您可以创建布局并将其作为视图返回。这些相应的视图显示在您的lisview行中。
答案 2 :(得分:0)
您正在从您的活动类调用自定义适配器类。您的自定义适配器类扩展了一个抽象类BaseAdapter
。扩展类将使用抽象方法(类似{{ 1}},getView()
,getItemId()
和getItem()
)。这些方法不需要从您的类中单独调用,因为您正在调用自定义的适配器类。