Как я могу показать список, отсортированный по категориям, с заголовком категории над первым элементом в этой категории? - PullRequest
1 голос
/ 12 августа 2011

Я пытаюсь показать список данных, отсортированных по полю, округ. В настоящее время у меня есть настройка ArrayCollection в качестве поставщика данных для списка искры. У меня есть ItemRenderer, прикрепленный к списку, и все работает отлично. Как показано в списке, он правильно отсортирован по округам.

Однако я пытаюсь сделать так, чтобы первому элементу в категории предшествовало имя категории, поэтому мы получаем такой вывод.

Округ 1

Предмет в графстве 1 Предмет в графстве 1 Предмет в графстве 1 Предмет в графстве 1

Округ 2

Предмет в графстве 2 Предмет в графстве 2 Предмет в графстве 2 Предмет в графстве 2

Графство 3

Предмет в графстве 3 Предмет в графстве 3 Предмет в графстве 3 Предмет в графстве 3

Один из других программистов в нашей команде выполнил это, введя новый элемент названия округа перед первым элементом в следующем округе. Этот элемент имеет идентификатор -1 и обрабатывается ItemRenderer по-разному. Мне кажется, что это не совсем правильный способ сделать это вообще. У кого-нибудь есть предложения получше?

1 Ответ

2 голосов
/ 12 августа 2011

Если я правильно понимаю вашу проблему, решение довольно простое: добавьте дополнительный List в ItemRenderer основного List.

Пример пользовательского ItemRenderer:

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark">

    <s:layout>
        <s:VerticalLayout />
    </s:layout>

    <s:Label id="labelDisplay" fontSize="16" />

    <s:List dataProvider="{data.children}" borderVisible="false">
        <s:layout>
            <s:HorizontalLayout />
        </s:layout>
    </s:List>

</s:ItemRenderer>

Ваш поставщик данных может выглядеть примерно так:

[Bindable]
private var dp:ArrayList = new ArrayList([
    {label: "County 1", children: new ArrayList(["A", "B", "C"])},
    {label: "County 2", children: new ArrayList(["D"])},
    {label: "County 3", children: new ArrayList(["E", "F"])}
]);

в результате получается:

enter image description here

...