【问题标题】:Is there a good reason for a ListView header taking up a position?ListView 标头占据一个位置是否有充分的理由?
【发布时间】:2010-10-26 21:01:04
【问题描述】:

我刚刚在我的 ListView 中添加了一个标题,我必须更改一堆代码,因为标题基本上变成了位置 0(这意味着我的 CursorAdapter 的光标索引与列表的索引不对齐。它们是现在关闭 1)。为什么?这对我来说似乎有点傻。

我能想到的唯一原因是开发人员可能想要访问标题。美好的。提供类似 getListView().getHeader() 的东西。

【问题讨论】:

  • 等到您必须放入自己的部分标题。这是一场噩梦。
  • 只要您指的是与列表关联的适配器,您就不应该有任何不合时宜的问题。添加页眉/页脚会包装您的适配器并为您进行这些调整。
  • 我可以放入我自己的部分标题就好了。使用 ArrayAdapter,我的部分标题是实际的列表项。使用 CursorAdapter,每个项目都有一个标题作为其视图的一部分,但它只显示在每个部分的顶部项目。这两种方法的问题是标题消失了;因此,您最终可能会得到一个充满项目的列表,并且不知道它们在哪个标题下,因为标题已滚动到屏幕顶部。我正在尝试使用 ListView 标题来解决这个问题,但显然它们也会滚动。

标签: android listview header android-cursor


【解决方案1】:

由于某种原因,position(来自onItemClick)与ListView不是适配器)中的项目数相关,包括页眉和页脚。当您设置OnItemClickListener 时,您应该通过调用listView.getItemAtPosition(position) 而不是adapter.getItem(position) 来检索点击的项目。

事实上,您应该始终使用getItemAtPosition,因为这样一来您的ListView 是否有页眉和页脚并不重要,而且如果您添加新的页眉,则无需更改代码。

如果你不希望你的标题是可选的,你应该以这种方式添加它:listView.addHeaderView(headerView, null, false)

【讨论】:

    【解决方案2】:

    我相信ListView 只不过是View 元素的列表。如果您在ListView 中添加页眉(或页脚,这不应该有任何区别),该元素基本上与通过ListAdapter 自动添加的任何其他元素没有什么不同。唯一的细微差别是页眉(和页脚)元素将被固定,并且不受ListAdapter 对列表所做的操作的影响——尽管它们仍然只是普通元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2019-12-21
      • 2013-06-04
      • 2010-10-18
      相关资源
      最近更新 更多