Как реализовать часть разделов с помощью LinearLayoutManager, а часть - с помощью 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
Кто-нибудь знает, как этого добиться с помощью литографии?
1 ответ
Решение
Электрический ток 0.11.1-SNAPSHOT
версия Litho поддерживает StaggeredGridRecyclerConfiguration
что позволяет создавать такой интерфейс. По сути, нам нужно создать экземпляр 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 для каждого настраиваемого представления. Но вы можете проголосовать за эту проблему здесь