如何在 airbnb Epoxy 中分配网格跨度?
How to assign grid span in airbnb Epoxy?
我已经开始学习如何在我的项目中使用 Epoxy。我正在通过 运行 sample project 学习这个库。在我深入研究网格跨度设置之前,一切都很好。我发现自己对其网格系统感到困惑。
正如您在示例应用中看到的,ViewHolder 可以分为 3 个部分。这些部分可以特别在模型中表示,例如 HeaderViewModel_
、ButtonBindingModel_
和 CarouselModelGroup
.
而init RecyclerView的代码如下:
EpoxyRecyclerView recyclerView = (EpoxyRecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
根据官方文档:
If a GridLayoutManager is used this will automatically sync the span
count with the EpoxyController.
我发现 HeaderViewModel_
和 CarouselModelGroup
可以正确同步跨度,但 ButtonBindingModel_
不是。我一直在示例代码中搜索 "span" 或 "grid" 一词, 我只是想不通为什么 ButtonBindingModel_
可以将其跨度设置为 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
设置为特定跨度的方法,无论通过代码(以编程方式)或通过布局。请帮我解决这个问题,我很感激。
我们使用的一件事是使用 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)
}
}
我已经开始学习如何在我的项目中使用 Epoxy。我正在通过 运行 sample project 学习这个库。在我深入研究网格跨度设置之前,一切都很好。我发现自己对其网格系统感到困惑。
正如您在示例应用中看到的,ViewHolder 可以分为 3 个部分。这些部分可以特别在模型中表示,例如 HeaderViewModel_
、ButtonBindingModel_
和 CarouselModelGroup
.
而init RecyclerView的代码如下:
EpoxyRecyclerView recyclerView = (EpoxyRecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
根据官方文档:
If a GridLayoutManager is used this will automatically sync the span count with the EpoxyController.
我发现 HeaderViewModel_
和 CarouselModelGroup
可以正确同步跨度,但 ButtonBindingModel_
不是。我一直在示例代码中搜索 "span" 或 "grid" 一词, 我只是想不通为什么 ButtonBindingModel_
可以将其跨度设置为 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
设置为特定跨度的方法,无论通过代码(以编程方式)或通过布局。请帮我解决这个问题,我很感激。
我们使用的一件事是使用 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)
}
}