Kaz*_*hen 1 android epoxy epoxy-modelview
我一直在学习如何在我的项目中使用 Epoxy。我正在通过运行示例项目来学习这个库。一切都很好,直到我深入研究网格跨度设置。我发现自己对它的网格系统感到困惑。
正如您在示例应用程序中看到的,ViewHolders 可以分为 3 个部分。这些部分可以特别用模型表示,例如HeaderViewModel_、ButtonBindingModel_和CarouselModelGroup。
init RecyclerView 的代码如下:
EpoxyRecyclerView recyclerView = (EpoxyRecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
Run Code Online (Sandbox Code Playgroud)
根据官方文档:
如果使用 GridLayoutManager,这将自动将跨度计数与 EpoxyController 同步。
我发现HeaderViewModel_并CarouselModelGroup正确同步了跨度,但ButtonBindingModel_不是。我一直在示例代码中搜索“跨度”或“网格”这个词,我只是不明白为什么ButtonBindingModel_可以将其跨度设置为 1。
如果我将 RecyclerView 的跨度设置从 2 更改为 3:
EpoxyRecyclerView recyclerView = (EpoxyRecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
Run Code Online (Sandbox Code Playgroud)
HeaderViewModel_并且CarouselModelGroup仍然保持同步完整跨度,但跨度ButtonBindingModel_仍然为1。
我想知道是否有一种方法可以使跨度ButtonBindingModel_达到完整跨度,以及通过代码(以编程方式)或通过布局来设置HeaderViewModel_和CarouselModelGroup设置特定跨度的方法。请帮我解决这个问题,我很感激。
我们使用的一件事是使用spanSizeOverride. 我们有几个不同的模型,我们希望跨度为 2 vs 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)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1875 次 |
| 最近记录: |