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

时间:2013-12-21 10:40:22

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

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

实现此目的有几种方法:

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

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

那你能建议我什么?怎么做标题偏移?每次滚动事件都调用relayout是正确的吗?

1 个答案:

答案 0 :(得分:0)

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

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

最后,我发现只有解决方案可行:自定义类

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

所以,我认为您应该搜索以GridView extends ListView创建您的课程。请参阅SBurish的 HFGridView ,了解它是如何做的非常简单。

希望这可以帮助您达到目的。