Я пытаюсь создать вложенный список в Flex, который будет динамически изменяться, чтобы отображать всех детей при изменении поставщика данных.Изменение размера вложенных mx: списки для отображения всех элементов списка
Вот упрощенный пример, который иллюстрирует эту проблему:
<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
Спасибо за ответ! Когда вы говорите «вычислять значения, как если бы все элементы списка отображались на экране в полном размере», вы имеете в виду (грубо говоря), что я умножаю количество элементов на некоторое заданное значение статической высоты? Я предполагаю, что не могу запросить элементы для их фактической высоты, если они уже не отображаются на экране. Или я ошибаюсь? – stubotnik
ЕСЛИ вы используете variableRowHeight, вам придется перебирать все itemRenderers в списке и вычислять измеренный вес, добавляя измеренный вес каждого средства визуализации. Возможно, вам нужно будет прочитать жизненный цикл Flex Component и как Flex создает компоненты и их детей: http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html – JeffryHouser
Еще раз спасибо. Я надеялся на то, что вы предлагаете, но я подумал, что это невозможно после того, как я прочитал это в описании метода listToItemRenderer() класса List: «Поскольку средства визуализации элементов существуют только для элементов в пределах набора видимых строк, вы не можете использовать это метод для элементов, которые не видны ». Это то, что вы имели в виду, или есть еще один способ привлечь моих детей к списку, чтобы я мог их измерить? – stubotnik