如何用 LinearLayoutManager 实现部分部分,用 GridLayoutManager 实现部分?
How to implement part of sections with LinearLayoutManager and part with GridLayoutManager?
我对回收商规范有很多不同类型的看法。
@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 的方式放置项目。
有人知道如何用光刻实现这个吗?
当前 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
尚不受支持,因此您必须为每个自定义视图创建自己的 MountSpecs。但是你可以为这个问题投票here
我对回收商规范有很多不同类型的看法。
@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 的方式放置项目。
有人知道如何用光刻实现这个吗?
当前 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
尚不受支持,因此您必须为每个自定义视图创建自己的 MountSpecs。但是你可以为这个问题投票here