Android:如果ListView中的项目内容是动态的,那么实现BaseAdapter的最佳方法是什么?

时间:2015-04-01 15:11:54

标签: android listview android-listview

在大多数情况下,我们需要为listview的动态项目内容实现BaseAdapter的getItemViewType()和getViewTypeCount(),如this post所述。但我认为这个解决方案只适用于有限数量并且事先知道,例如listview项目,包括发送布局和接收布局。

如果listview及其项目内容不可能事先知道呢? 例如,我需要从服务器显示联系人列表,联系人列表大小约为几千。对于每个项目,我需要显示例如爱好“列表”。它是0到数十个字符串的小范围。所以在这种情况下:

  1. 使用“getItemViewType”
  2. ,项目类型比正常情况相对更大
  3. 虽然每个项目可能不同,但在某种程度上相似:项目内容的视图数量不同,但在视图类型中很常见。项目A与项目B不同,因为它有更多的文本视图。
  4. enter image description here

    对于getView中的每一次,convertview很难简单地重用,因为它们是不同的,但如果我们创建新的TextView并添加到convertView,它将影响listview的滚动。我不认为这样做是合适的。在这种情况下我该怎么办?

1 个答案:

答案 0 :(得分:0)

很遗憾,您无法轻易更改项目视图类型的数量。只有在getViewTypeCount()上设置适配器时才会调用ListView方法。这意味着,如果您要动态更改它,那么您必须再次调用setAdapter()。这是一个巨大的性能损失,因为ListView将抛弃所有回收的视图并从头开始重新生成所有内容。

老实说,看起来你应该使用ExpandableListView代替。它允许您显示组下的项目列表。唯一的区别是组被放在列表的顶部。所以你的图片左侧有A,B,C,D ......在ExpandableListView它会位于顶部。

ExpandableListView可以轻松处理您的情况,其中给定的分组可能包含任何可变数量的项目。您提到需要存储联系人列表。我建议您查看RolodexArrayAdapterExpandableListView一起使用。它可能会有所帮助。