如何在airbnb环氧树脂中分配网格跨度?

时间:2019-04-14 14:14:12

标签: android epoxy epoxy-modelview

我已经开始学习如何在项目中使用环氧树脂。我正在通过运行sample project学习此库。一切都很好,直到我深入到网格跨度设置。我发现自己对其网格系统感到困惑。

enter image description here

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

init RecyclerView的代码如下:

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

根据官方文档:

  

如果使用GridLayoutManager,它将自动同步跨度   用EpoxyController计数。

我发现HeaderViewModel_CarouselModelGroup已正确同步跨度,但ButtonBindingModel_不是。我一直在示例代码中搜索“ span”或“ grid”一词,我只是不知道为什么ButtonBindingModel_的跨度可以设置为1。 < / p>

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

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

enter image description here

HeaderViewModel_CarouselModelGroup仍然可以同步整个跨度,但是ButtonBindingModel_的跨度仍为1。

我想知道是否有一种方法可以使ButtonBindingModel_的跨度为全跨度,以及是否有方法通过代码将HeaderViewModel_CarouselModelGroup设置为特定跨度(以编程方式)或按布局。请帮助我解决这个问题,谢谢。

1 个答案:

答案 0 :(得分:0)

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

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)
  }
}