2010-04-04 81 views
0

我有一个RelativeLayout与不同的元素。我打算在它上面有两个ListView,但我注意到滚动有一些问题。由于每个ListView只显示最多5行,我应该尝试使某种自定义适配器合并这些ListViews?或者更好的方法是用LinearLayout/RelativeLayout替换ListView并添加行,因为我手动获取它们? (就像这里的第一个答案:android listview display all available items without scroll with static header)。我应该使用多个ListViews吗?

这应该是正确的做法吗?还是有另一种方式?另外,每行都会有一个OnClickListener。

回答

2

有两种解决方案,如果你想保留你的列表... list-y,而不必预渲染所有的行像上面的解决方案建议的视图(这可能是渲染速度慢,吃RAM和不很好地扩展到一个屏幕或两个视图,但是对于较小的列表来说,这是一个很好的快速解决方案,但我只是在ScrollView的LinearLayout中使用一堆视图,而不是在这种情况下使用ListView)。

  1. 编写自定义ListAdapter,覆盖getItemViewType,getViewTypeCount和GetView充气适当样的看法,并为您的两种意见适当回收。您还需要覆盖getItem以包含自定义逻辑,以确定要查看哪组源数据并相应地映射数据,或者将数据细分为一个对象列表(如果您使用的是阵列适配器)并在getView方法中投射(可能比在getItem中处理它而不投射时慢)。

  2. 只需使用cwac-merge,一个视图和适配器包装适配器。您可以将两个ListAdapter放入MergeAdapter并将其设置为您的单个ListView的适配器。

+1

我想我会尝试cwac合并。感谢你的回答。 – 2010-04-05 11:44:54

1

我有滚动问题。我从来没有想过如何让ListView共享垂直空间与不同的视图,并为他们都有一个单一的滚动条。

我通过让所有需要在布局中滚动的ListView中的一行来解决它。

将视图作为行添加到LinearLayout可能会遇到扩展问题,但是如果总共只有10行,我认为您会好的。在第一代Android设备上,它可能会开始迟滞20个物品(显然取决于布局的复杂性)。当ListView出现在屏幕上时,ListView只会膨胀视图。

因此,在回答您的问题时,您建议的两种替代方法中的任何一种都可以,但LinearLayout选项最容易编码。

+0

感谢您的回答。请你能详细说明你的第一个解决方案吗? – 2010-04-04 21:14:26