【问题标题】:What is the best way to implement Header support in GridView?在 GridView 中实现 Header 支持的最佳方法是什么?
【发布时间】:2014-03-06 19:34:28
【问题描述】:

大家都知道 GridView 不像 ListView 那样支持页眉和页脚。

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

  • 使用 ListView 并通过 ViewGroups 手动形成 columnt。它不适合我,因为它需要大量的布局操作,如测量和布局,并且很难在顶部实现绘图选择器。
  • 使用特殊适配器。它适用于页脚:我们应该用Space 填充最后一个单元格,并在它们之后手动插入宽度等于 GridView 宽度的页脚。但这不适用于标题:虽然标题被拉伸,但下一个单元格会浮在上面。
  • 使用网格布局。 GridLayout 很好,但是 500-1000 个单元格的性能如何? AdapterView 支持缓存和重用视图,据我所知,这在 GridLayout 中是不可能的。
  • 扩展 GridView 并编写自定义类,允许在网格内容之前绘制标题。这很困难,但它应该工作得非常快。让我们试着弄清楚如何做到这一点:

    1. 测量接头。这很简单,我对此没有任何疑问。
    2. 网格顶部的布局标题。我们还应该考虑滚动位置以允许移动带有整个网格内容的标题,所以我的第一个问题是:如何知道滚动时底部边框的位置?
    3. 在标题之后布局整个网格内容。怎么做?我以前也这样做过。
    4. 也将绘图发送到标题视图并解决过度滚动效果,如果它不能正常工作。
    5. 处理滚动事件并刷新标题位置。

那么你有什么建议吗?如何进行标头偏移?每次滚动事件都调用重新布局是否正确?

【问题讨论】:

    标签: android android-layout gridview android-custom-view android-gridview


    【解决方案1】:

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

    我仔细阅读了您的建议以及来自其他网站的一些建议。我也有同样的反应。我找到了一个简单的方法作为您的提示:“使用特殊的适配器。它适用于页脚......”和this answer by @RaulSoto 帮助了我很多。但是当我尝试更新我的 gridview 时,我有一个 NPE,因为我的页脚与我的项目的布局不同,并且我有一个自定义过滤器,它重新计算了 getCount() 方法,但不明白添加了另一个视图。

    最后,我找到了唯一可行的解​​决方案:自定义类

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

    所以,我认为您应该搜索以将您的课程创建为GridView extends ListView。请参考 SBurish 的 HFGridView,很容易理解它是如何工作的。

    希望这可以帮助您实现目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 2017-06-22
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多