2011-04-04 75 views
1

我有一个Spark.List有几个项目(“文件夹”),每个项目都包含一个ArrayList的文件,当我选择其中一个“文件夹”时,它应该显示“文件列表“在另一个Spark.List上。它现在的工作做的:Flex Spark List不更新,丢失项目

private function onFolderChange (event:*):void { 
    var list:List = event.currentTarget as List; 

    if (list.selectedIndex != -1) { 
     currentFolder = null; 
     currentFolder = list.selectedItem; 

     fileListDataProvider = currentFolder.files; 
     fileList.selectedIndex = -1; 
    } 
} 

的问题是,当“文件”缩略图覆盖更多的则列表视口,并通过从“文件夹”改变有时需要滚动到另一个“文件夹”的文件列表丢失文件。例如,假设我有一个“文件夹1”,其中包含30个“文件”(10个可见和20个隐藏的滚动条),“文件夹2”有5个“文件”(全部可见),如果我切换在“文件夹”之间来回显示有时它会显示一切正确,有时它会在没有需要时在“文件夹2”上显示滚动,有时它只会在“文件夹1”中显示几个(5或10)“文件” “即使它有30个。

fileList有问题,它更新它的项目但没有真正更新。我试着将itemRenderer设置为null并重新应用,将dataProvider设置为null并重新应用,然后执行validateNow()....我有点迷路了。

有什么想法?

回答

1

为什么不使用直接数据绑定?

<s:List id="folders" dataProvider="{folderList}" /> 
<s:List id="files" dataProvider="{folders.selectedItem?folders.selectedItem.files:null}" /> 

对于您的问题,请尝试使用useVirtualLayoutupdateDisplayList()玩....

+0

对不起,我并没有完全解释,我试图让这个例子更简单,这样会更容易理解但在我的情况下,我不能使用直接绑定,因为我实际上有2个不同的文件夹列表,所以每个都有一个更改处理程序,取消选择另一个,并将数据提供程序应用于文件列表。 – 2011-04-04 16:21:32

+0

好的:)我的答案的第二部分是否改变了事情? – Kodiak 2011-04-04 16:28:05

+0

我尝试过useVirtualLayout,但没有运气,至于updateDisplayList,它似乎没有该方法。我想我可能已经通过向fileList.updateComplete事件添加侦听器并在处理器中将itemRenderer设置为null然后重新应用itemRenderer来修复它,似乎当有很多文件时,我必须等待此事件能够强制渲染。感谢您的帮助。 – 2011-04-04 16:59:35