【问题标题】:Flex Spark List not updating, missing itemsFlex Spark 列表未更新,缺少项目
【发布时间】:2011-04-04 15:44:56
【问题描述】:

我有一个 Spark.List,其中包含多个项目(“文件夹”),每个项目都包含一个 ArrayList 文件,当我选择其中一个“文件夹”时,它应该在另一个 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().... 我有点迷路了。

有什么想法吗?

【问题讨论】:

    标签: apache-flex list


    【解决方案1】:

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

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

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

    【讨论】:

    • 对不起,我没有完全解释清楚,我试图使示例更简单,以便更容易理解,但在我的情况下,我不能使用直接绑定,因为我实际上有2 个不同的文件夹列表,因此每个文件夹列表都有一个更改处理程序,可以取消选择另一个并将数据提供程序应用于文件列表。
    • 好的 :) 我的答案的第二部分会改变什么吗?
    • 我试过 useVirtualLayout 但没有运气,至于 updateDisplayList 它似乎没有那个方法。我想我现在可能已经通过向 fileList.updateComplete 事件添加一个侦听器并在处理程序中将 itemRenderer 设置为 null 然后重新应用 itemRenderer 来修复它,似乎当有很多文件时我必须等待这个事件能够强制它渲染。顺便感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    相关资源
    最近更新 更多