【问题标题】:How to display dynamic data in ListView with ordering如何通过排序在 ListView 中显示动态数据
【发布时间】:2012-11-27 15:41:18
【问题描述】:

我想做什么:

  • 显示项目列表
  • 实际数据来自外部来源,可能会发生变化
  • 每个项目可以有几个“列”。例如。 “类型”、“内容”、“日期”
  • 列表应该例如可按“类型”和“日期”排序。

我认为我可以使用 ListView 获得所需的功能(但也许这也是一个非常糟糕的选择?)。我已经阅读了一些关于它们的东西,但仍然有一些问题。我知道 ListView 显示由适配器管理的数据。如果我有一个 ArrayAdapter,Listview 是否总是按照 Adapter 中底层 Array 的顺序显示项目?所以要实现排序,我必须以某种方式更改适配器中的数组?我读过,您可以使用 SimpleAdapter 连续拥有多个属性,但 SimpleAdapter 使用的数据似乎是静态的。我怎样才能做到这一点?

提前致谢!

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    是的,ListView 将代表您的 ArrayListVector([]) 的排序方式。现在,如果您想为每一行设置多个属性,我建议您创建一个您选择的 Object,例如:class Person,其中包含姓名、年龄、地址等。 然后创建一个包含Person 对象的列表。然后在您将覆盖的ArrayAdapter 中的getView 中,您可以调用Person person = getItem(position);,现在您在该特定行(位置)中拥有该对象,并且可以使用该Person 做任何您想做的事情对象。

    【讨论】:

      【解决方案2】:

      创建您自己的适配器,并在getView() 返回与您的位置匹配的视图。例如,如果你得到这样的数据:

      id  name
      0   ccc
      1   bbb
      2   aaa
      

      然后当您按id 排序并且listview 想要位置1 的行时,您返回1 bbb。但是,如果您按名称升序排序,并且列表需要第 2 行,那么您将返回 0 ccc。当然,您需要维护“映射”,但这很简单。

      【讨论】:

      • 所以如果要显示一行,ListView 会调用 getView 吗?我刚刚注意到,ArrayAdapter 有一个“排序”方法,我想这也很有用。
      • 是的,或者您可以对源数据进行排序。无论哪种方式都可以解决问题。
      猜你喜欢
      • 2019-01-14
      • 1970-01-01
      • 2015-09-14
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多