我有一个由ArrayCollection为其dataProvider支持的Spark List(spark.components.List
)。当有太多的行要显示时,List有一个垂直滚动条。我想要的是当一个新行被添加到列表中以便滚动到底部以显示新行时。当添加新数据时,Flex Spark List滚动到底部
我试着从ArrayCollection的侦听器调用List的ensureIndexIsVisible
。这不起作用,因为列表尚未完全呈现新行。它要么滚动到倒数第二行,或者抛出该异常:
Error: invalidIndex
at spark.layouts.supportClasses::LinearLayoutVector/start()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\layouts\supportClasses\LinearLayoutVector.as:893]
at spark.layouts.supportClasses::LinearLayoutVector/getBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\layouts\supportClasses\LinearLayoutVector.as:1117]
at spark.layouts::VerticalLayout/getElementBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\layouts\VerticalLayout.as:852]
at spark.layouts.supportClasses::LayoutBase/http://www.adobe.com/2006/flex/mx/internal::getScrollPositionDeltaToElementHelper()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\layouts\supportClasses\LayoutBase.as:1367]
at spark.layouts.supportClasses::LayoutBase/getScrollPositionDeltaToElement()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\layouts\supportClasses\LayoutBase.as:1348]
at spark.components::List/ensureIndexIsVisible()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\components\List.as:2105]
我确信,我的听众是设置列表的dataProvider之后添加到ArrayCollection中。希望在List有机会处理新行后,我会打电话给ensureIndexIsVisible
。我的猜测是列表不会呈现该行,直到稍后发生的某个重绘事件(在我调用ensureIndexIsVisible
之后)。
我也试过指定一个VerticalLayout
并将它的verticalScrollPosition
设置为过大的数字(如99999)。这有同样的问题 - 它滚动到最后一行的第二个问题。
那么,有没有办法滚动到Spark列表中新添加的行?我唯一能在互联网上找到的是poorly formatted flexcoders thread。
您是否尝试在'callLater'中调用'ensureIndexIsVisible()'?像'callLater(function():void {ensureIndexIsVisible(lastIndex)});' – 2010-10-07 18:04:08
是的,我试过了,它不起作用,显然callLater没有足够晚的时间被调用。我确实使用了setTimeout,它确实有效,但这非常不合理。 – 2010-10-07 18:39:16