ListにitemRenderer

前回のAIRでディレクトリ選択ダイアログで、ディレクトリ内のファイルをListに表示させたんですが、

var files:Array = directory.getDirectoryListing();す
var filenames:ArrayCollection = new ArrayCollection();

for (var i:uint = 0; i < files.length; i++) {
  filenames.addItem(files[i].name);
}
fileList.dataProvider = filenames;

というように、Fileクラスの配列から、ファイル名の配列を作りなおしました。
これはFileクラスの配列をそのまま渡すと、こんな感じでファイル名の表示ができないからでした。

でも、せっかく取得したFileクラスの配列があるのに、それを捨てて別の配列を作るのが気に入らなかったので、別の方法を考えていたらitemRendererというものがあることを知りました。
で、itemRendererをつかった書き直したコードが以下です。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()">

  <mx:Script>
    <![CDATA[
      import mx.collections.ArrayCollection;
      private var directory:File = File.documentsDirectory;

      private function initApp():void {
          directory.addEventListener(Event.SELECT, directorySelected);
      }
    
      private   function onClick():void {
        try
        {
            directory.browseForDirectory("Select Directory");
        }
        catch (error:Error)
        {
            trace("Failed:", error.message)
        }

      }

      private function directorySelected(event:Event):void {
          directory = event.target as File;
          var files:Array = directory.getDirectoryListing();
          fileList.dataProvider = files;
      }  
      
    ]]>
  </mx:Script>

  <mx:Button label="open" click="onClick()"/>
  <mx:List id="fileList" width="100%" height="100%">
    <mx:itemRenderer>
      <mx:Component>
        <mx:Label text="{data.name}"/>
      </mx:Component>
    </mx:itemRenderer>
  </mx:List>
    
</mx:WindowedApplication>

これだとFileクラスの配列をdataProviderにそのまま渡してもファイル名を表示してくれます。
ポイントは以下のようにitemRendererを使っているところです。

<mx:List id="fileList" width="100%" height="100%">
  <mx:itemRenderer>
    <mx:Component>
      <mx:Label text="{data.name}"/>
    </mx:Component>
  </mx:itemRenderer>
</mx:List>

これで、めでたしめでたし、と思ったのですが、ファイル名の配列を作りなおしたときに比べてスクロールが重い。。。
まぁ、とりあえず今回はこれで良し、としておくことにします。