我有一个具有不同元素的RelativeLayout。我打算在它上面有两个ListView,但我注意到滚动有一些问题。由于每个ListView只显示最多5行,我是否应该尝试使用某种自定义适配器来合并这些ListView?或者更好地用LinearLayout / RelativeLayout替换ListView并在我手动获取行时添加行? (就像这里的第一个答案:android listview display all available items without scroll with static header)。
这应该是正确的方法吗?还是有另一种方式?此外,每一行都有一个OnClickListener。
答案 0 :(得分:2)
如果您想保留列表... list-y,有两种解决方案,而不必像上面的解决方案建议的那样预渲染所有行视图(渲染速度慢,占用内存并且无法扩展)很好地超过一两个视图,但对于较小的列表是一个很好的快速解决方案,虽然我只是在ScrollView的LinearLayout中使用一堆视图而不是在这种情况下的ListView。)
编写一个自定义ListAdapter,重写getItemViewType,getViewTypeCount和GetView以扩展正确类型的视图,并为您的两种类型的视图进行适当的回收。您还需要覆盖getItem以包含自定义逻辑,以确定要查看哪些源数据集并相应地映射数据,或者将数据压缩到一个对象列表中(如果您使用的是arrayadapter)并在getView方法中强制转换(可能比在没有强制转换的情况下在getItem中处理它慢一点。)
只需使用cwac-merge,一个视图和适配器包装适配器。您可以将两个ListAdapter放入MergeAdapter并将其设置为单个ListView的适配器。
答案 1 :(得分:1)
我遇到滚动问题。我从来没有弄清楚如何让ListView与不同的视图共享垂直空间,并为它们提供单个滚动条。
我通过让所有需要在ListView中的一行上滚动来解决它。
将行视图添加到LinearLayout可能会出现扩展问题,但如果您总共只有10行,我认为您会没问题。在第一代Android设备上,它可能会开始变得迟钝大约20项(显然取决于布局复杂性)。 ListView只会通过在屏幕上显示视图时进行扩展。
因此,在回答您的问题时,您建议的两个备选方案中的任何一个都可以,但LinearLayout选项将是最容易编码的。