【问题标题】:How to assign grid span in airbnb Epoxy?如何在airbnb Epoxy中分配网格跨度?
【发布时间】:2019-04-14 14:14:11
【问题描述】:

我已经开始学习如何在我的项目中使用 Epoxy。我通过运行sample project 来学习这个库。一切都很好,直到我深入研究网格跨度设置。我发现自己对它的网格系统感到困惑。

正如您在示例应用程序中看到的,ViewHolders 可以分为 3 个部分。这些部分可以特别在模型中表示,例如HeaderViewModel_ButtonBindingModel_CarouselModelGroup

而init RecyclerView的代码如下:

EpoxyRecyclerView recyclerView = (EpoxyRecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));

根据官方文档:

如果使用 GridLayoutManager,这将自动同步 span 用 EpoxyController 计数。

我发现 HeaderViewModel_CarouselModelGroup 正确同步跨度,但 ButtonBindingModel_ 不是。我一直在搜索示例代码中的“span”或“grid”一词,我只是不明白为什么 ButtonBindingModel_ 可以将其 span 设置为 1。

如果我将 RecyclerView 的跨度设置从 2 更改为 3:

EpoxyRecyclerView recyclerView = (EpoxyRecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));

HeaderViewModel_CarouselModelGroup 仍然保持同步整个跨度,但 ButtonBindingModel_ 的跨度仍然是 1。

我想知道是否有一种方法可以将ButtonBindingModel_ 的跨度设置为全跨度,以及将HeaderViewModel_CarouselModelGroup 设置为特定跨度的方法,无论是通过代码(以编程方式)还是通过布局。请帮我解决这个问题,不胜感激。

【问题讨论】:

    标签: android epoxy epoxy-modelview


    【解决方案1】:

    我们使用的一件事是使用spanSizeOverride 在模型基础上设置跨度。 我们有几个不同的模型,我们希望跨度为 2 与 1,因此我们在它们上设置了覆盖。

    gridLayoutManager.spanSizeLookup = ourController.spanSizeLookup
    ...
    
    collectionDescription {
      id(DESCRIPTION_ID)
      description(data.description ?: "")
      spanSizeOverride { _, _, _ -> 2 }
    }
    data.productTemplates?.forEachIndexed { index, product ->
      collectionProduct {
        id("$PRODUCT_ID ${product.slug} $index")
        product(product)
        listener(listener)
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 2021-04-27
      • 2016-10-27
      • 1970-01-01
      相关资源
      最近更新 更多