2

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

4

3 回答 3

1

当您将适配器设置为视图(例如ListViewGridView)时,该视图在某些时候想要显示一些项目。所以它getView在适配器中调用:

getView(int position, View convertView, ViewGroup parent).

位置是项目在列表/网格/等中的位置。这convertView是一个回收的视图,它可以被先前的getView()调用膨胀,或者当它还没有膨胀时为 null (参见这个关于 convertView 和视图回收的答案。

父视图用于膨胀视图,因此可以相对于父视图计算正确的布局参数。

请注意,通货膨胀是缓慢的。这就是为什么convertView存在这种机制,以循环使用视图,从而最大限度地减少通货膨胀的数量。除此之外,查找视图 ( findViewById()) 也相对较慢。为了改进这一点,请查看ViewHolderpattern,它将对视图的引用保存在内存中,因此不必每次都搜索它们。

于 2013-10-28T09:35:05.887 回答
0

我认为这个链接可以帮助你。getview 是一个回调函数,当您在 Activity 上显示列表视图时会自动调用它。当您显示您的列表视图时,您将覆盖 getview 并从 XML 扩展您的行或动态创建您的行。您返回的那一行作为显示在您的列表视图中的视图。

创建您自己的自定义适配器时,getView() 方法如何工作?

对于每一行,getview 将被调用一次。您创建布局并将它们作为视图返回。这些各自的视图显示在您的 lisview 行中。

于 2013-10-28T09:35:17.763 回答
0

您正在从您的活动类调用自定义适配器类。您的自定义适配器类扩展了BaseAdapter一个抽象类。抽象的方法将被扩展类使用(方法,如,,,getView()和)。这些方法不应该由于您正在调用自定义的适配器类,因此需要从您的 Class 单独调用。getItemId()getItem()getCount()

于 2013-10-28T09:40:22.393 回答