Flash Builder -> Tree -> ノードの開閉
expandItem() メソッドを用いることで実現できる。
開く場合は、第2引数を true に、閉じる場合は、第2引数を false に。
- public function expandItem(
- item:Object,
- open:Boolean,
- animate:Boolean = false,
- dispatchEvent:Boolean = false,
- cause:Event = null
- ):void
Adobe® Flex® 4.1 リファレンスガイド:Tree expandItem() メソッド
今のところ、XMLListCollection の方法しかわからない。
しかも、場所を自由に選ぶ方法がわからない。
詳細は、以下の 特定のノードの開閉 を参照。
今のところ、起動時に固定フォルダを開く方法しか試していない。
- var myXML:XML = new XML(event.result);
- myTree.dataProvider = new XMLListCollection( new XMLList(myXML) );
- myTree.validateNow();
- treeFavorit.expandItem(myXML.children()[0], true, true);
これはルートを表示しない方式の Tree で、1番目のフォルダをデフォルトで開いた状態にしている。
4行目に関しては
dataProvider を設定し、その直後に expandItem() を呼び出した場合は、不適切な動作が起こる可能性があります。
コンポーネントが検証されるまで待つか、validateNow() を呼び出します。
リファレンスのこの指示に従ったまでである。
Tree コンポーネントには、indexToItemRenderer() メソッドというものがあり
インデックスから当該アイテムレンダラを取得できる。
ただこのインデックスは曲者で、現在の状態で上から何番目 というものらしく
ノードの開閉状態によって コロコロ変化する ようだ。
さりながら、メインフォルダであればルートを表示していれば 1 。
ルートを表示してなければ 0 になる。
これを利用して以下のようにすることで、メインフォルダに関してだけは成功した。
- var myXML:XML = new XML(event.result);
- myTree.dataProvider = new XMLListCollection( new XMLList(myXML) );
- myTree.validateNow();
- var renderer:IListItemRenderer = myTree.indexToItemRenderer(0);
- if (renderer)
- {
- var myXML:XML = renderer.data as XML;
- myTree.expandItem(myXML, true);
- }