1
我想在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 2010-08-17 11:37:19
如果您使用的是variableRowHeight,您將不得不遍歷列表中的所有itemRenderer,並通過添加每個渲染器的measuredHeight來計算measuredHeight。您可能需要閱讀Flex Component LifeCycle以及Flex如何創建組件及其子代:http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html – JeffryHouser 2010-08-17 17:50:03
再次感謝。我希望能有像你這樣的建議,但是我認爲在List類的indexToItemRenderer()方法描述中讀到這個後,這是不可能的:「因爲項目渲染器只存在於一組可視行中的項目,所以你不能使用這個方法爲不可見的項目。「這是你的想法還是有另一種方式來讓我的手在列表的孩子,所以我可以衡量他們? – stubotnik 2010-08-17 21:03:05