Мне было интересно, можем ли мы создать 2D прокручиваемый список с помощью litho?Я попробовал вложенный RecyclerCollectionComponents, но он заставляет столбцы прокручиваться по отдельности, а не по функциональности панорамирования, которую я хочу.Я также попробовал GridRecyclerConfiguration, но он прокручивается только вертикально.Я также хочу контролировать количество элементов в каждом столбце и высоту каждого элемента.Будем благодарны за любые указания о том, как этого добиться.
То, что я пробовал:
final Component component =
RecyclerCollectionComponent.create(context)
.disablePTR(true)
.section(ListSection.create(new SectionContext(context)).build())
.recyclerConfiguration(new ListRecyclerConfiguration(
LinearLayoutManager.HORIZONTAL, false ))
.build();
return LithoView.create(context, component);
RecyclerView компонент
@LayoutSpec
public class RecyclerViewSpec {
@OnCreateLayout
static Component onCreateLayout(
final ComponentContext c) {
return RecyclerCollectionComponent.create(c)
.section(ListSection.create(new SectionContext(c)).build())
.build();
}
}
Разделы для вышеупомянутого RecyclerView, который содержит вложенные RecyclerViews
@GroupSectionSpec
public class ListSectionSpec {
private static List<Integer> generateData(int count) {
final List<Integer> data = new ArrayList<>(count);
for (int i = 0; i < count; i++) {
data.add(i);
}
return data;
}
@OnEvent(RenderEvent.class)
static RenderInfo onRender(final SectionContext c, @FromEvent Integer model) {
return ComponentRenderInfo.create()
.component(
ListItem.create(c)
.color(model % 2 == 0 ? Color.WHITE : Color.LTGRAY)
.title(model + ". Hello, world!")
.subtitle("Litho tutorial")
.build())
.build();
}
@OnCreateChildren
static Children onCreateChildren(final SectionContext c) {
Children.Builder builder = Children.create();
for (int i = 0; i < 32; i++) {
builder.child(
SingleComponentSection.create(c)
.key(String.valueOf(i))
.component(RecyclerCollectionComponent.create(c)
.disablePTR(true)
.section(
DataDiffSection.<Integer>create(c)
.data(generateData(32))
.renderEventHandler(ListSection.onRender(c))
.build())
.canMeasureRecycler(true)));
}
return builder.build();
}
}
Отдельные элементы списка
@LayoutSpec
public class ListItemSpec {
@OnCreateLayout
static Component onCreateLayout(
ComponentContext c,
@Prop int color,
@Prop String title,
@Prop String subtitle) {
return Column.create(c)
.paddingDip(ALL, 16)
.backgroundColor(color)
.child(
Text.create(c)
.text(title)
.textSizeSp(40))
.child(
Text.create(c)
.text(subtitle)
.textSizeSp(20))
.build();
}
}
Это создает список, который прокручивается по горизонтали, в то время как отдельные столбцыпрокрутите вертикально.Я хочу одну поверхность, которую мы можем перемещать в любом направлении.