我使用自定义项目渲染器来渲染 DataGroup 的项目。 问题是每当数据提供者(在我的情况下是Arraylist)的值发生变化时, 渲染需要6-9秒,这是不可接受的。
当我试图回溯问题时,我发现只要数据量较少,DataGroup就会立即刷新,所有项目都会在一秒钟内呈现。
但只要有相对更多的数据,DataGroup需要5-7秒才能刷新。
这是我的数据组:
<s:DataGroup id="selectedInstancesView" dataProvider="{relatedInstances}" width="100%" height="100%"
itemRenderer="com.ui.renderers.CustomInstanceRenderer"
clipAndEnableScrolling="true" >
这是将值重新分配给上述数据组的数据提供者的函数:
private function relatedInstanceRetrieved(event:ResultEvent):void{
trace("related instances retrieved at :: " + new Date());
relatedInstances = new ArrayList(event.result as Array);
trace("related instances populated at :: " + new Date());
}
这是在我的custom-item-renderer类中,我在创建项目渲染器的时候打印时间:
protected function itemrenderer1_creationCompleteHandler(event:FlexEvent):void
{
trace("getting rendered at :: " + new Date()); }
这是我得到的结果:
related instances retrieved at :: Wed Apr 20 **20:58:10** GMT+0530 2016
related instances populated at :: Wed Apr 20 **20:58:10** GMT+0530 2016
getting rendered at :: Wed Apr 20 **20:58:15** GMT+0530 2016
getting rendered at :: Wed Apr 20 20:58:15 GMT+0530 2016
getting rendered at :: Wed Apr 20 20:58:15 GMT+0530 2016
...(1000 similar traces with exact same time)
所有项目渲染器(大约1000个)都是在一秒钟内创建的。
但是,如果你看到,那个时间 重新填充或重新分配数据提供者(relatedInstances) 和 项目渲染器开始创建的时间是 5 秒,这意味着刷新数据需要5秒钟,这是不可接受的。
我尝试过使用invalidateDisplayList();
重新分配项呈示器和invalidateProperties()方法我正在使用flex sdk 4.6
请赐教。