Android自定义适配器如何工作?

时间:2013-10-28 09:29:29

标签: java android android-listview custom-adapter

我试图在我的应用程序中使用自定义listView,并且我对其工作原理有一些疑问。当我实现自定义适配器时,它的方法(特别是getView方法)如何工作而不从任何其他类调用它们?

3 个答案:

答案 0 :(得分:1)

当您将适配器设置为视图(例如ListViewGridView)时,该视图在某个时候想要显示一些项目。所以它在适配器中调用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())。这些方法不需要从您的类中单独调用,因为您正在调用自定义的适配器类。