Изменить размер вложенного mx: списки для отображения всех элементов списка - PullRequest
1 голос
/ 17 августа 2010

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

Вот упрощенный пример, иллюстрирующий проблему:

<mx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;

        [Bindable]
        public var outer:ArrayCollection = new ArrayCollection(["one", "two", "three"]);

        [Bindable]
        public var inner:ArrayCollection = new ArrayCollection([]);

        public function addInnerListItems () : void {
            inner.addItem("fish");
            inner.addItem("mice");
            inner.addItem("cats");
            inner.addItem("bats");
        }
    ]]>
</mx:Script>

<mx:Button label="Add inner list items" click="addInnerListItems()" />

<mx:List dataProvider="{outer}" rowCount="{outer.length}">
    <mx:itemRenderer>
        <mx:Component>
            <mx:VBox>
                <mx:Label text="{this.data}" />
                <mx:List dataProvider="{outerDocument.inner}" rowCount="{outerDocument.inner.length}">
                    <mx:itemRenderer>
                        <mx:Component>
                            <mx:Label text="{this.data}" />
                        </mx:Component>
                    </mx:itemRenderer>
                </mx:List>
            </mx:VBox>
        </mx:Component>
    </mx:itemRenderer>
</mx:List>

Размеры списка остаются неизменными при добавлении элементов.

Если я добавлю variableRowHeight="true" к внешнему списку, то внутренние списки изменят размер правильно. Но сам внешний список остается в фиксированном размере.

Как можно автоматически изменить размеры обоих списков, чтобы отобразить все дочерние элементы?

Спасибо! Stu

1 Ответ

1 голос
/ 17 августа 2010

Переопределите класс списка и в своем новом классе переопределите метод меры, чтобы вычислить measureWidth и measureHEight, чтобы вычислить значения, как если бы все элементы списка были отображены на экране в полном размере.

Затем переопределите updateDisplayList () в компоненте, который содержит встроенный список, чтобы изменить размер верхнего списка к измеренным значениямWW и MeasureurDHeight.Если вы сделаете это, вы будете отображать все элементы на экране, что сводит на нет преимущества повторного использования рендерера при использовании класса List.

...