当我尝试对其数据提供程序进行排序时,我遇到了Spark List的奇怪问题。 这是我的列表(this._albums是一个XMLListCollection):
<s:List id="albumsList" width="100%" height="100%" useVirtualLayout="true"
dataProvider="{this._albums}"
skinClass="DataList_AlbumsList"/>
这就是我的排序方式:
protected function onSortChosen(event:IndexChangeEvent):void
{
var sortFct:Function;
switch(event.newIndex)
{
// ...
case 2:
{
sortFct = statusAsc;
break;
}
// ...
}
var sort:Sort = new Sort();
sort.compareFunction = sortFct;
this._albums.sort = sort;
this._albums.refresh();
}
protected function statusAsc(a:XML, b:XML, fields:Array = null):int
{
var statusA:String = ("@status" in a) ? a.@status : "preparing";
var statusB:String = ("@status" in b) ? b.@status : "preparing";
return ObjectUtil.stringCompare(statusA, statusB);
}
仅当排序函数(statusAsc)至少返回0(statusA == statusB)一次时才会出现此问题:排序后,列表中的某些项目有时会丢失,有时其他项目不会位于列表的顶部(列表顶部和项目之间存在间隙)等。
有什么问题?数据提供程序似乎总是正确的,如果在排序时没有任何相等性,问题就会消失......