0
これは明らかに、指定されたディレクトリからファイルを一覧表示するFileSystemListを持っています。すべて私はファイルの作成日に基づいてリストを並べ替えることを除いて素晴らしい作品。FileSystemList日付で並べ替え
FileSystemList
の場合は可能ですか?
これは明らかに、指定されたディレクトリからファイルを一覧表示するFileSystemListを持っています。すべて私はファイルの作成日に基づいてリストを並べ替えることを除いて素晴らしい作品。FileSystemList日付で並べ替え
FileSystemList
の場合は可能ですか?
デフォルトでは、ファイル名はnameCompareFunction
プロパティでのみソートできます。残念ながら、FileSystem *コントロールのAPIは、拡張性やカスタマイズのために設計されていません。だから、物事が "少し" より複雑になり、あなたがFileSystemList
から派生する必要があります。
com.stackoverflow.MyFileSystemList
package com.stackoverflow
{
import mx.controls.FileSystemList;
import mx.core.mx_internal;
use namespace mx_internal;
public class MyFileSystemList extends FileSystemList
{
public function MyFileSystemList()
{
super();
// overwrite the FileSystemControlHelper instance
helper = new MyFileSystemControlHelper(this, false);
iconFunction = helper.fileIconFunction;
labelFunction = helper.fileLabelFunction;
directory = COMPUTER;
}
public function set fileCompareFunction(value:Function): void
{
MyFileSystemControlHelper(helper).fileCompareFunction = value;
}
public function get fileCompareFunction():Function
{
return MyFileSystemControlHelper(helper).fileCompareFunction;
}
}
}
com.stackoverflow.MyFileSystemControlHelper
package com.stackoverflow
{
import mx.controls.fileSystemClasses.FileSystemControlHelper;
import mx.core.mx_internal;
use namespace mx_internal;
public class MyFileSystemControlHelper extends FileSystemControlHelper
{
public function MyFileSystemControlHelper(owner:Object, hierarchical:Boolean)
{
super(owner, hierarchical);
directoryEnumeration = new MyDirectoryEnumeration();
}
private var _customFileCompareFunction:Function;
private var customFileCompareFunctionChanged:Boolean = false;
public function set fileCompareFunction(value:Function): void
{
_customFileCompareFunction = value;
customFileCompareFunctionChanged = true;
owner.invalidateProperties();
}
public function get fileCompareFunction():Function
{
return _customFileCompareFunction;
}
override public function commitProperties():void
{
super.commitProperties();
if (customFileCompareFunctionChanged)
{
MyDirectoryEnumeration(directoryEnumeration).customFileCompareFunction = fileCompareFunction;
directoryEnumeration.refresh();
owner.dataProvider = directoryEnumeration.collection;
itemsChanged();
customFileCompareFunctionChanged = false;
}
}
}
}
com.stackoverflow .DirectoryEnumeration
package com.stackoverflow
{
import flash.filesystem.File;
import mx.utils.DirectoryEnumeration;
import mx.utils.DirectoryEnumerationMode;
public class MyDirectoryEnumeration extends DirectoryEnumeration
{
public function MyDirectoryEnumeration(source:Array = null)
{
super(source);
}
private var _fileCompareFunction:Function;
public function get customFileCompareFunction(): Function
{
return _fileCompareFunction;
}
public function set customFileCompareFunction(value: Function):void
{
_fileCompareFunction = value;
}
override public function fileCompareFunction(file1:File, file2:File, fields:Array=null):int
{
if (_fileCompareFunction == null)
return super.fileCompareFunction(file1, file2, fields);
if (file1.isDirectory && !file2.isDirectory)
{
if (enumerationMode == DirectoryEnumerationMode.DIRECTORIES_FIRST)
return -1;
if (enumerationMode == DirectoryEnumerationMode.FILES_FIRST)
return 1;
}
if (!file1.isDirectory && file2.isDirectory)
{
if (enumerationMode == DirectoryEnumerationMode.DIRECTORIES_FIRST)
return 1;
if (enumerationMode == DirectoryEnumerationMode.FILES_FIRST)
return -1;
}
return _fileCompareFunction(file1, file2);
}
}
}
その後、MyFileSystemList
コンポーネントを使用して、作成日に基づいてファイルを並べ替える独自の比較機能を提供することができます。
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:stackoverflow="com.stackoverflow.*">
<stackoverflow:MyFileSystemList fileCompareFunction="compareFiles"/>
<fx:Script><![CDATA[
private function compareFiles(file1:File, file2:File):int
{
if (file1.creationDate.time > file2.creationDate.time)
return 1;
else
return -1;
}
]]></fx:Script>
</s:WindowedApplication>
Thanx!非常に有望に見えます!私はそれを見て、後で "レポート" ;-)とあなたに戻ってきます – Nicke
私はあなたのソリューションのスプラッシュを実装し、それは素晴らしい動作します! Thanx、これは命の恩人だった! :-) – Nicke