Прокручиваемый список 2D / функциональность панорамирования с использованием litho? - PullRequest
0 голосов
/ 26 февраля 2019

Мне было интересно, можем ли мы создать 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();
    }
}

Это создает список, который прокручивается по горизонтали, в то время как отдельные столбцыпрокрутите вертикально.Я хочу одну поверхность, которую мы можем перемещать в любом направлении.

1 Ответ

0 голосов
/ 26 февраля 2019

Если вы можете понять, как это сделать в стандартном Android, то вы можете использовать те же принципы, чтобы заставить его работать в Litho (например, использовать тот же LayoutManager, который вы использовали бы в стандартном Android).AFAIK, это не так просто сделать в стандартном Android.

...