【问题标题】:Should I use multiple ListViews?我应该使用多个 ListView 吗?
【发布时间】:2010-04-04 19:54:48
【问题描述】:

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

这应该是正确的方法吗?还是有其他方法?此外,每一行都会有一个 OnClickListener。

【问题讨论】:

    标签: android listview


    【解决方案1】:

    如果您想保留列表,有两种解决方案... list-y,无需像上述解决方案建议的那样预先渲染所有行视图(渲染速度可能会很慢,占用 RAM 并且无法扩展很好地超过一两个屏幕的视图,但对于较小的列表来说是一个很好的快速解决方案,尽管在这种情况下我只会在 ScrollView 的 LinearLayout 中使用一堆视图,而不是 ListView)。

    1. 编写一个自定义 ListAdapter,覆盖 getItemViewType、getViewTypeCount 和 GetView 以膨胀适当类型的视图并为您的两种类型的视图适当地回收。您还需要覆盖 getItem 以包含自定义逻辑,以找出要查看的源数据集并相应地映射数据,或者将数据混合到一个对象列表中(如果您使用的是数组适配器)并在 getView 方法中进行转换(可能比在 getItem 中处理它而不进行转换要慢一些)。

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

    【讨论】:

    • 我想我会尝试 cwac-merge。感谢您的回答。
    【解决方案2】:

    我在滚动时遇到问题。我从来没有想过如何让 ListView 与不同的 View 共享垂直空间,并为它们都提供一个滚动条。

    我通过让所有需要在布局上滚动的东西在 ListView 中的一行来解决这个问题。

    将视图作为行添加到 LinearLayout 可能会出现问题,但我认为如果总共只有 10 行就可以了。在第一代 Android 设备上,它可能会开始变得迟缓,大约 20 个项目(显然取决于布局复杂性)。 ListView 通过仅在视图出现在屏幕上时对其进行放大来进行扩展。

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

    【讨论】:

    • 感谢您的回答。请问,您能否在第一个解决方案中详细说明?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2016-07-02
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    相关资源
    最近更新 更多