【问题标题】:Recycling views in a non-scrollable grid view inside ScrollView在 ScrollView 内的不可滚动网格视图中回收视图
【发布时间】:2015-07-22 05:58:11
【问题描述】:

我有一个包含其他几个视图的 ScrollView,我希望其中一个视图成为具有相同布局的其他视图的网格(例如 ImageView)。

由于不建议在另一个视图中包含一个可滚动视图,因此我希望此网格视图不可滚动,否则我会使用 GridView 或 RecyclerView。

当然,我可以将网格视图放置在标准布局之一(例如 TableLayout)中,但是当存在许多网格项时,这可能会导致内存问题。 是否有任何标准方法或库允许为 ScrollView 内的非滚动视图回收视图?

【问题讨论】:

  • 如果回收视图是滚动视图的一部分,则回收视图滚动将不起作用。所以最好在滚动视图之外使用回收视图。
  • 你能贴出你的代码吗

标签: android scrollview android-recyclerview


【解决方案1】:

如果你试图强制 GridViewRecyclerView 不可滚动(所以基本上你必须强制视图的尺寸显示所有元素)你最终会遇到和你一样的情况使用了TableLayout(所以你需要注意内存问题)。

如果您禁用滚动(回收)元素(如 GridView/RecyclerView)的滚动,您将禁用使这些东西有效工作的最重要部分(使这些东西重用它们的视图)。

您应该解决问题的方法是将您的ScrollView其他 Views 作为RecyclerView 的一部分。你的RecyclerView 应该配备adapter 可以膨胀多种类型的Views(你可以阅读它,例如here)。

【讨论】:

  • 这是一个有趣的想法,理论上它几乎解决了我的问题。剩下的问题是这个特殊视图应该被可视化为网格,而其他视图的宽度=match_parent。所以我想需要一个用于回收站视图的自定义布局管理器来支持这一点。你知道哪里有吗?
  • 这比您想象的要容易。只需使用常规的GridLayoutManager,将列数(屏幕的“网格部分”)作为spanCount 在构造函数中传递。然后使用GridLayoutManagersetSpanSizeLookup 方法指定您希望它充当LinearLayoutManagersetSpanSizeLookup 应该返回1)的适配器的哪些位置,以及您希望它在哪些位置是网格( setSpanSizeLookup 应该返回前面提到的列数)。
  • 哇哦,我不知道 GridLayoutManager 提供了这个功能。鉴于此功能,也许它不应该被称为 Grid...无论如何,非常感谢您的帮助!
【解决方案2】:

由于您使用的是RecyclerView,因此您可以使用NestedScrollView 而不是ScrollView,因为RecyclerView 扩展自NestedScrollingChildNestedScrollView 扩展自NestedScrollingParent,它们应该会更好地发挥作用。

您可以使用的其他视图是VerticalGridViewHorizontalGridView,但正如您所说,您担心性能问题,您可以向RecyclerView 提供GridLayoutManager,我会坚持下去。

【讨论】:

    猜你喜欢
    • 2016-09-22
    • 2011-12-07
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多