为了账号安全,请及时绑定邮箱和手机立即绑定

为每行提供不同布局的AndroidListView

为每行提供不同布局的AndroidListView

弑天下 2019-06-03 10:30:03
为每行提供不同布局的AndroidListView我正在尝试确定一个包含每个行的不同布局的单一ListView的最佳方式。我知道如何创建自定义行+自定义数组适配器以支持整个列表视图的自定义行,但如何在ListView中实现许多不同的行样式?
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

因为您知道有多少类型的布局,所以可以使用这些方法。

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

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

然后,只有当布局为NULL并使用getItemViewType.

本教程以获取更多信息。

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

  • 在调用的对象中存储视图

    ViewHolder

    ..它会提高速度,因为你不用打电话

    findViewById()

    每次

    getView

    方法。看见

    清单14中的API演示.

  • 创建一个符合所有属性组合的通用布局,如果当前位置没有,则隐藏一些元素。

我希望这会对你有帮助。如果您能够提供一些XML存根,并提供数据结构和信息,您将确切地将其映射到行中,我将能够给您提供更精确的建议。按像素计算。


查看完整回答
反对 回复 2019-06-03
?
不负相思意

TA贡献1777条经验 获得超10个赞

我知道如何创建自定义行+自定义数组适配器来支持整个列表视图的自定义行。但是,一个列表视图如何支持许多不同的行样式?

你已经知道基本知识了。您只需要让您的自定义适配器根据所提供的行/游标信息返回不同的布局/视图。

ListView可以支持多行样式,因为它派生自AdapterView:

AdapterView是一个视图其子女由适配器决定。

如果你看看适配器,您将看到说明如何使用特定于行的视图的方法:

abstract int getViewTypeCount()// Returns the number of types of Views that will be created ...abstract int getItemViewType(int position)
// Get the type of View that will be created ...abstract View getView(int position, View convertView, ViewGroup parent)
// Get a View that displays the data ...

后两种方法提供职位所以你可以用它确定视图类型你应该用为那一行.


当然,您通常不直接使用AdapterView和Adapter,而是使用或派生它们的一个子类。Adapter的子类可以添加其他功能,以更改如何获得不同行的自定义布局。由于用于给定行的视图是由适配器驱动的,诀窍是让适配器返回给定行的所需视图。根据特定适配器的不同,如何做到这一点不同。

例如,使用ArrayAdapter,

  • 覆盖

    getView()

    若要膨胀、填充和返回给定位置的所需视图,请执行以下操作。这个

    getView()

    方法包括通过

    convertView

    参数。

但使用CursorAdapter,

  • 覆盖

    newView()

    若要对当前游标状态(即当前的“行”)进行充气、填充和返回所需的视图,还需要覆盖

    bindView

    以便小部件可以重用视图]

但是,要使用SimpleCursorAdapter,

  • 定义

    SimpleCursorAdapter.ViewBinder

    带着

    setViewValue()

    方法对给定行(当前游标状态)和数据“列”进行充气、填充和返回所需的视图。该方法只定义“特殊”视图,并遵从SimpleCursorAdapter对“普通”绑定的标准行为。

查找您最终使用的适配器类型的具体示例/教程。


查看完整回答
反对 回复 2019-06-03
  • 3 回答
  • 0 关注
  • 777 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信