2015-04-01 83 views
0

在大多数情况下,我们需要为列表视图的动态项目内容实现BaseAdapter的getItemViewType()和getViewTypeCount(),如this post所述。但我认为这个解决方案只适用于有限数量并且事先知道,比如带有发送布局和接收布局的列表视图项目。Android:如果ListView中的项目内容是动态的,那么实现BaseAdapter的最佳方式是什么?

如果事先不知道其项目内容的列表视图,那么情况如何呢? 例如,我需要显示一个来自服务器的联系人列表,联系人列表大小约为几千。对于每个项目,我需要显示,例如,爱好“列表”。它是一个0到几十个字符串的小范围。因此,在这种情况下:

  1. 的项目类型是使用“getItemViewType”
  2. 虽然每个项目可以是不同的比正常情况下相对较大,但类似于一定程度:该项目的内容是在数量不同视图,但在视图类型中很常见。项目A与项目B的区别仅在于它具有更多的TextView。

enter image description here

对于在getView每一次,convertview很难简单地重用,因为它们是不同的,但如果我们创建新的TextView并将其添加到convertView,它会影响列表视图的滚动。我认为这种方式并不合适。我应该在这种情况下做什么?

+0

只是将您的视图视为一个空的RelativeLayout,在getView()中填充了子视图,那么您有多少个不同的视图?答案是:一个 – pskink 2015-04-01 15:34:02

+0

嗯,如果你真的想重用视图我没有看到任何其他的解决方案,使“超视图”,其中包含最大数量的文字视图,他们是可见性=“走了”,并根据如何切换可见性很多你实际上有 – 2015-04-01 15:35:05

+0

林不知道这是否会比单纯夸大每个案件的意见,更有效 – 2015-04-01 15:35:50

回答

0

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

说实话,它看起来像你应该使用ExpandableListView来代替。它允许您显示组下的项目列表。唯一的区别是这些组被放置在列表的顶部。因此,在图片左侧有A,B,C,D的地方......在ExpandableListView的位置上,它会位于最上面。

ExpandableListView可以很容易地处理您的情况,给定的分组可能有任何可变数量的项目。你提到需要存储联系人列表。我建议看看RolodexArrayAdapterExpandableListView一起使用。它可能有帮助。

+0

对于这种情况下,改变风格,使顶部A,B是好的。但是UE设计特殊的UI效果,比如所有左侧(A,B,C,D列)都有通过,那么就像你说的那样,ExpandableListView似乎无法处理这个...... – mianlaoshu 2015-04-02 00:40:28

+0

我听到了雅。那么可能需要放弃他的UE特效。要么这样做,要么使用ListView并持续删除/添加新视图,以动态调整每个列字母中可变数量的数据。考虑到你有成千上万的联系人显示... ListView选项可能无法正常工作。 – 2015-04-02 00:46:25

相关问题