Apache flex 对列表的数据提供程序进行排序时,列表项呈现程序重复
标题基本上说明了我的问题。我正在对数据提供程序进行排序以获取列表。我的列表上有ItemRenders。生成3个项目,opt1、opt2、opt3-然后在列表上进行拖放,完成后,我等待在列表的数据提供程序中设置自定义newRank变量。然后在对列表排序之后,我的项目渲染器渲染出5个项目,而不是3个:opt2、opt3、opt1前三个正确排序,opt3、opt3。 我尝试使用基本排序和customFunction进行排序,但无法使其正确排序。任何帮助都将不胜感激Apache flex 对列表的数据提供程序进行排序时,列表项呈现程序重复,apache-flex,flex3,Apache Flex,Flex3,标题基本上说明了我的问题。我正在对数据提供程序进行排序以获取列表。我的列表上有ItemRenders。生成3个项目,opt1、opt2、opt3-然后在列表上进行拖放,完成后,我等待在列表的数据提供程序中设置自定义newRank变量。然后在对列表排序之后,我的项目渲染器渲染出5个项目,而不是3个:opt2、opt3、opt1前三个正确排序,opt3、opt3。 我尝试使用基本排序和customFunction进行排序,但无法使其正确排序。任何帮助都将不胜感激 public function so
public function sortItemsByNewRank():void{
var srt:Sort = new Sort();
//srt.fields = [new SortField("newRank", true, false, true)];
srt.compareFunction = myCompare;
var ac:ArrayCollection = this.dataProvider as ArrayCollection;
ac.sort = srt;
ac.refresh();
}
private function myCompare(a:Object, b:Object, fields:Array = null):int {
LOG.debug("ExtendedList a and b: "+a.newRank+" "+b.newRank);
if(a.newRank == b.newRank) {
return 0;
} else if(a.newRank > b.newRank) {
return 1;
} else{
return -1;
}
}
取一个[Bindable]变量并将其放入列表中。。。 在排序函数中,使用该变量并调用refresh。。。 例如
这可能会解决您的重复问题。…我能够解决这个问题。大多数问题都与我的排序运行时反复触发的DATA_CHANGE事件有关。我插了一面旗子,它解决了我的问题。有点粗糙,但invalidateList允许我清除并重新初始化UI中的数据 我认为这种方法确实有效。不起作用的是列表组件在刷新后绘制数据提供程序。它正在复制项目,我尝试调用invalidateDisplayList和invalidateList来让列表重新绘制自己,但它什么也没做。
[Bindable]
private var _dataProvider:ArrayCollection
public function sortItemsByNewRank():void{
var srt:Sort = new Sort();
//srt.fields = [new SortField("newRank", true, false, true)];
srt.compareFunction = myCompare;
_dataProvider.sort = srt;
_dataProvider.refresh();
}
<s:List dataProvider="{_dataProvider}"/>