1

我在回收站规范中有许多不同类型的视图。

@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 方式放置项目。 在此处输入图像描述

有人知道如何用光刻实现这一目标吗?

4

1 回答 1

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目前尚不支持,因此您必须为每个自定义视图创建自己的 MountSpecs。但是你可以在这里为这个问题投票

于 2018-02-13T09:38:21.957 回答