我在回收商规范中有许多不同类型的观点。
@LayoutSpec
object AdPageSpec {
@OnCreateLayout
fun onCreateLayout(c: ComponentContext, @Prop model: List<AdPageItem>): ComponentLayout {
return RecyclerCollectionComponent.create(c)
.disablePTR(true)
.section(
DataDiffSection.create<AdPageItem>(SectionContext(c))
.data(model)
.renderEventHandler(AdPage.onRender(c))
.build()
)
.buildWithLayout()
}
@OnEvent(RenderEvent::class)
fun onRender(c: ComponentContext, @FromEvent model: AdPageItem): RenderInfo {
when (model) {
is TopDetailsItem -> ...
is DescrItem -> ...
is ParamItem -> ...
is GridItem -> ...
}
一切正常但在某些时候我需要以GridLayoutManager方式放置项目。
有人知道如何用litho实现这个目标吗?
答案 0 :(得分:0)
当前0.11.1-SNAPSHOT
版本的litho支持StaggeredGridRecyclerConfiguration
,允许构建此类UI。
基本上,我们需要实例化RecyclerCollectionComponent
RecyclerCollectionComponent.create(c)
.recyclerConfiguration(
StaggeredGridRecyclerConfiguration<SectionBinderTarget>(3)
)
.section(...)
.build()
如果我们想要一个项目占据整个范围,我们需要在创建渲染信息时设置isFullSpan
:
@OnEvent(RenderEvent::class)
fun onRender(c: SectionContext,
): RenderInfo {
return when (model) {
is ImagesItem -> ComponentRenderInfo.create()
.isFullSpan(true)
.component(...)
.build()
}
请注意,ViewRenderInfo
尚不支持,因此您必须为每个自定义视图创建自己的MountSpec。但您可以投票支持此问题here