【问题标题】:How to optimizie ListView with different item's layout如何使用不同的项目布局优化 ListView
【发布时间】:2010-08-09 17:08:25
【问题描述】:

在我的列表视图中,我有具有不同布局的项目,实际上它们多次使用一个子布局。我不能使用 getViewTypeCount() 和 getItemViewType(),因为我不知道子布局会被使用多少次。是否可以以某种方式优化 getView() 方法并使用它的 convertView 参数,还是每次都必须膨胀视图?

【问题讨论】:

    标签: android listview


    【解决方案1】:

    既然您知道您将拥有多少种布局类型 - 可以使用这些方法。

    getViewTypeCount() - 此方法返回您的列表中有多少行类型的信息

    getItemViewType(int position) - 根据位置返回您应该使用哪种布局类型的信息

    然后,只有当它为 null 并使用 getItemViewType 确定类型时,您才膨胀布局。

    查看this 教程了解更多信息。

    更新:

    为了实现您在评论中描述的结构优化,我建议:

    • 在名为ViewHolder 的对象中存储视图。它将提高速度,因为您不必每次都在 getView 方法中调用 findViewById()。见List14 in API demos
    • 创建一个通用布局,该布局将符合所有属性组合并在当前位置没有元素时隐藏一些元素。

    希望对你有所帮助。如果您可以提供一些带有数据结构的 XML 存根以及您希望如何将其映射到行中的信息,我将能够为您提供更准确的建议

    【讨论】:

    • 感谢输入,但正如我所说,我不知道列表视图中将使用多少种不同的布局,这就是为什么我无法覆盖 getViewTypeCount()
    • 您能否提供更多详细信息,为什么您无法预测布局的位置和数量。这很奇怪。像素提供的 anwser 是通知视图回收器当前需要的布局的唯一方法。
    • 我向 Web 服务发送 http 请求以获取 xml 响应,其中有,例如只是具有少量属性子节点的 节点,后跟不同数量的 子节点,所以我创建了两个 xml 布局,一个用于项目,一个用于子项目,在项目布局中我创建了几个视图对于它的属性以及线性布局,我在其中添加了这些子项
    • 你为什么不看看 ExpandableListView ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    相关资源
    最近更新 更多