XMLとArrayCollection
急に設定画面のタブリスト(mx:List)の内容が表示されなくなったのでかなり悩んでいた。
このタブリスト(TabList)のdataProviderは、設定XMLから読んだ属性値からなるArrayCollectionをdataProviderとするTabBarから、そのArrayCollection.sourceをconcatして得られたものだが、TabBarのほうは正常に表示できていたし、concatして得られたものをtraceしてもデータが入っていたので不可思議でならなかった。
そこで、ArrayCollection内の1つのデータをObjectと考えてfor文でまわしたら、連想配列になっていた。つまりtoString()では中身が取れるけど、ListのdataProviderとしては不適切な形になっていたのである。
おおもとをたどると
var ar : Array = []; for each(var tab : XML in CommonData.configxml.main.tabbar.tab) { ar.push(tab.@name); } tabbar.titles = new ArrayCollection(ar);
ここがいけなかった。@nameではまだXMLListだったはずで、それがそのままObjectとして格納されてしまったらしい。
正解はこれ。
var ar : Array = []; for each(var tab : XML in CommonData.configxml.main.tabbar.tab) { ar.push(tab.@name.toString()); } tabbar.titles = new ArrayCollection(ar);
これでもいいね。
for each(var name : XML in CommonData.configxml.main.tabbar.tab.@name) { ar.push(name.toString()); }