在GridView中实现Header支持的最佳方式是什么



每个人都知道GridView不像ListView那样支持页眉和页脚。

有几种方法可以实现这一点:

  • 通过ViewGroups手动使用ListView和表单列。它对我不起作用,因为它需要大量的布局操作,如测量和布局,并且很难在顶部实现绘制选择器
  • 使用专用适配器。它可以很好地处理页脚:我们应该用Space填充最后一个单元格,并在它们后面手动插入宽度等于GridView宽度的页脚。但这不适用于页眉:尽管页眉被拉伸,但下一个单元格会浮动在它上面
  • 使用网格布局。GridLayout不错,但500-1000个单元格的性能如何?AdapterView支持缓存和重用视图,据我所知,这在GridLayout中是不可能的
  • 扩展GridView并编写自定义类,允许在网格内容之前绘制页眉。这很难,但应该很快就能奏效。让我们试着找出如何做到这一点:

    1. 测量收割台。这很简单,我对此没有任何疑问
    2. 在网格顶部布局页眉。我们还应该考虑滚动位置,以允许移动标题和整个网格内容,所以我的第一个问题是:如何知道滚动时底部边界应该位于哪里
    3. 在页眉之后布局整个网格内容。如何做到这一点?我以前做过这种事
    4. 将绘图也发送到页眉视图,并在效果不佳时解决过度滚动的影响
    5. 处理滚动事件并刷新标题位置

那么你能给我什么建议?如何进行表头偏移?调用每个滚动事件的重新播放是否正确?

我用GridView搜索了相同情况下的答案(但要查找FooterView)。

我仔细阅读了你的建议和其他网站上的一些建议。我也有同样的反射。我找到了一个简单的方法作为你的提示:">使用特殊的适配器。它与页脚配合得很好…",@RaulSoto的这个回答对我帮助很大。但当我试图更新我的网格视图时,我有一个NPE,因为我的页脚与我的项目布局不同,我有了一个自定义过滤器,它重新计算了getCount()方法,但不知道添加了另一个视图。

最后,我找到了唯一有效的解决方案:一个自定义类

按照您所说的创建自己的类:">扩展GridView并编写自定义类">,但不扩展GridView。您应该使用ListView进行扩展,并测量整个宽度、列宽和列数。我认为,扩展GridView,计算标题视图的高度,并在移动网格视图时移动它,或者每次处理滚动事件时刷新标题,这样就不那么困难了
我想用这种方式来做,我在GitHub上做了一个小项目:Sergey Burish的HFGridView。这正是我所需要的,不再需要了
我只在我的应用程序中添加了一个自定义的attrs文件,并对他的项目进行了一些自定义,以获得预期的结果(特别是,参考我布局中的numColumns属性,它是一列为纵向模式,两列为横向模式)
当我尝试添加HeaderView并通过添加新项目刷新内容时,只是为了测试,头视图会保持在我的网格视图列表的顶部,而不会刷新自己。

因此,我认为您应该搜索以将您的类创建为GridView extends ListView。请参阅SBurish的HFGridView,了解它的作用非常简单。

希望这能帮助你实现目标。

最新更新