将ListView Stick的标题视图(不是节标题)放在顶部

时间:2013-08-12 19:14:41

标签: android android-listview

我有一个带有HeaderView的ListView。

我希望HeaderView中的一个观点能够贴在最前面。

我见过很多关于粘性节标题的例子。

我还查看了StickyScrollViewItems,但由于我使用的是ListView,因此我无法使用ScrollView

是否有可用的库,或者我是否应该覆盖OnScrollListener的{​​{1}}?

感谢。

2 个答案:

答案 0 :(得分:1)

我不知道有哪些库允许你这样做,但我对标题的做法是使用RelativeLayout作为我的xml,ListView。然后根据需要创建标题视图并为其提供属性

android:layout_alignParentTop="true"

然后提供您的ListView

android:layout_below="@id/idOfHeaderView

这是我知道将标题视图停靠在顶部的最简单方法。它每次都对我有用。我希望这会有所帮助。

答案 1 :(得分:1)

我刚刚编写了大量代码来执行此操作,但由于合同原因我无法共享。基本上遵循概述here的方法并应用于列表视图而不是滚动视图。

要点是

  1. 创建一个包含浮动/粘性标题的包装视图,并将列表视图包含为兄弟
  2. 使用isSticky布尔值添加标头时使用代理方法 - 如果是粘滞的,则将相应大小的列表视图中的假空白标题添加到浮动标题包装器的预期标题视图中(在此处使用相对布局)
  3. 设置列表视图的滚动侦听器,该侦听器跟踪列表中虚拟标题视图的顶部px位置,并将其设置为位于相对布局内的浮动标题的上边距
  4. 处理所有令人讨厌的边缘情况/ OEM过度滚动废话以使其在所有情况下都能正常工作(例如this用于三星)
  5. 请记住在列表视图布局后设置浮动/固定标题的初始位置。

    我觉得它有点牵扯并需要进行一些调整才能做到正确 - 这是我羡慕iOS的时候,任何iOS开发人员都会认为你需要一段时间才能实现松弛:D

    在撰写本文时,所有Open libs都使用滚动视图或列表视图标题。这些方法的问题是列表视图循环视图(因此与滚动视图不同,您只能保留对虚拟视图的引用),并且当前库似乎使用适配器getView方法等重复粘贴视图 - 其中对于动态列表视图标题视图没有好处,因为它们不被回收并且只能有一个父级,所以重新显示会很烦人(在我的情况下有很多功能所以我不想创建两个相同类型的视图和shoehorn当前的libs以适合我的解决方案)