代码之家  ›  专栏  ›  技术社区  ›  Jan S.

我应该使用多个列表视图吗?

  •  0
  • Jan S.  · 技术社区  · 14 年前

    我有一个不同元素的相对布局。我计划在它上面有两个列表视图,但是我注意到滚动有一些问题。由于每个ListView最多只能显示5行,我是否应该尝试创建某种自定义适配器来合并这些ListView?还是用LinearLayout/RelativeLayout替换ListView,并在手动获取行时添加行更好?(就像这里的第一个答案: android listview display all available items without scroll with static header )

    这样做的正确方法是什么?还是有别的办法?而且,每一行都有一个onclicklistener。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Yoni Samlan    14 年前

    如果你想保留你的清单,有两个解决方案…list-y,不必像上面的解决方案所建议的那样预先渲染所有的行视图(渲染速度可能很慢,占用了RAM,不能很好地缩放到一个或两个以上的视图,但是对于较小的列表来说,它是一个很好的快速解决方案,尽管在这种情况下,我只需要在滚动视图中使用一组线性布局的视图,而不是一个列表视图)。

    1. 编写一个自定义的ListAdapter,重写GetItemViewType、GetViewTypeCount和GetView,以便为两种类型的视图适当地展开适当类型的视图并进行回收。您还需要重写getItem以包含自定义逻辑,以确定要查找的源数据集并相应地映射数据,或者将数据下放到一个对象列表中(如果您使用的是arrayadapter)并在getView方法中强制转换(可能比在getItem中不强制转换处理慢一点)。

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

        2
  •  1
  •   Jim Blackler    14 年前

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

    我把所有需要在布局上滚动的内容都放在ListView的一行中,以此来解决这个问题。

    将视图作为行添加到线性布局中可能会遇到向上扩展的问题,但我认为如果总共只有10行,则可以。在第一代安卓设备上,它可能会开始变得迟缓,大约20个项目(显然取决于布局的复杂性)。只有当视图出现在屏幕上时,列表视图才会放大。

    因此,在回答您的问题时,您建议的两个备选方案中的任何一个都可以,但是线性布局选项将是最容易编码的。