Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 添加新数据时,Flex Spark列表滚动到底部_Apache Flex_Flash - Fatal编程技术网

Apache flex 添加新数据时,Flex Spark列表滚动到底部

Apache flex 添加新数据时,Flex Spark列表滚动到底部,apache-flex,flash,Apache Flex,Flash,我有一个Spark列表Spark.components.List,由其数据提供程序的ArrayCollection支持。当要显示的行太多时,列表会有一个垂直滚动条。我想要的是当一个新行被添加到列表中时,它会滚动到底部以显示该新行 我已尝试从ArrayCollection上的侦听器调用列表的ensureIndexIsVisible。这不起作用,因为列表尚未完全呈现新行。它将滚动到最后一行的第二行,或引发异常: Error: invalidIndex at spark.layouts.suppor

我有一个Spark列表Spark.components.List,由其数据提供程序的ArrayCollection支持。当要显示的行太多时,列表会有一个垂直滚动条。我想要的是当一个新行被添加到列表中时,它会滚动到底部以显示该新行

我已尝试从ArrayCollection上的侦听器调用列表的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]
我已确保在设置列表的数据提供程序后,将我的侦听器添加到ArrayCollection。希望在列表有机会处理新行后,我会调用ensureIndexIsVisible。我的猜测是,在调用ensureIndexIsVisible之后发生某个重画事件之前,列表不会呈现该行

_acGuestBookMessages.addItemAt(obj, _acGuestBookMessages.length);
var arr:Array = [_acGuestBookMessages.length-1];
callLater(lstGuestBookMessages.ensureIndexIsVisible, arr);
我还尝试指定VerticalLayout并将其verticalScrollPosition设置为一个过大的数字,如99999。这也有同样的问题-它会从最后一行滚动到第二行

那么,有没有办法滚动到Spark列表中新添加的行?我在互联网上唯一能找到的就是这个。

我的解决方案是扩展列表并覆盖updateDisplayList,它可以:

protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
    super.updateDisplayList(unscaledWidth, unscaledHeight);
    // call ensureIndexIsVisible here
}
请参阅关于的讨论。

我的解决方案是扩展列表并覆盖updateDisplayList,它可以工作:

protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
    super.updateDisplayList(unscaledWidth, unscaledHeight);
    // call ensureIndexIsVisible here
}

请参阅关于的讨论。

我没有扩展列表以覆盖updateDisplayList,而是在FlexEvent.UPDATE\u中添加了一个侦听器来完成我的列表组件,它对我来说很好。

没有扩展列表以覆盖updateDisplayList,我在列表组件的FlexEvent.UPDATE\u COMPLETE中添加了一个侦听器,它对我来说运行得很好。

我发现,在插入列表数据提供程序后直接运行ensureIndexIsVisible时,它无法准确地提取列表中最后一项的位置。这似乎是因为绑定没有机会更新列表。对我来说,最快的解决方案是稍后在ensureIndexIsVisible上运行调用

_acGuestBookMessages.addItemAt(obj, _acGuestBookMessages.length);
var arr:Array = [_acGuestBookMessages.length-1];
callLater(lstGuestBookMessages.ensureIndexIsVisible, arr);

我发现,在插入列表数据提供程序后直接运行ensureIndexIsVisible时,它无法准确地提取列表中最后一项的位置。这似乎是因为绑定没有机会更新列表。对我来说,最快的解决方案是稍后在ensureIndexIsVisible上运行调用

_acGuestBookMessages.addItemAt(obj, _acGuestBookMessages.length);
var arr:Array = [_acGuestBookMessages.length-1];
callLater(lstGuestBookMessages.ensureIndexIsVisible, arr);

我也有同样的问题,这对我很有效-

if(chatCollection.length > 0)
{
    chatList.validateNow();
    chatList.ensureIndexIsVisible(chatCollection.length - 1);
}

我也有同样的问题,这对我很有效-

if(chatCollection.length > 0)
{
    chatList.validateNow();
    chatList.ensureIndexIsVisible(chatCollection.length - 1);
}

想要滚动到更新火花列表的底部,然后 确保索引可见是不是有太多未记录的麻烦? 我通过处理列表上数据组属性的物理高度来实现这一点

function newMessage(...)
{
    messages.addItemAt(msg, messages.length);               
    messages.refresh();
    scrollToBottom();
}

function scrollToBottom():void
{
    messagesList.addEventListener("updateComplete", scrollUpdate);
}

private function scrollUpdate(e:Event):void
{
    messagesList.removeEventListener("updateComplete", scrollUpdate);
    messagesList.dataGroup.verticalScrollPosition = messagesList.dataGroup.contentHeight - messagesList.dataGroup.height;
}

想要滚动到更新火花列表的底部,然后 确保索引可见是不是有太多未记录的麻烦? 我通过处理列表上数据组属性的物理高度来实现这一点

function newMessage(...)
{
    messages.addItemAt(msg, messages.length);               
    messages.refresh();
    scrollToBottom();
}

function scrollToBottom():void
{
    messagesList.addEventListener("updateComplete", scrollUpdate);
}

private function scrollUpdate(e:Event):void
{
    messagesList.removeEventListener("updateComplete", scrollUpdate);
    messagesList.dataGroup.verticalScrollPosition = messagesList.dataGroup.contentHeight - messagesList.dataGroup.height;
}

您是否尝试在callLater中调用ensureIndexIsVisible?类似calllater函数:void{ensureIndexIsVisiblelastIndex};是的,我试过了,但没有成功,显然callLater没有被及时调用。我确实使用了setTimeout,它确实可以工作,但这很难。您是否尝试在稍后的调用中调用ensureIndexIsVisible?类似calllater函数:void{ensureIndexIsVisiblelastIndex};是的,我试过了,但没有成功,显然callLater没有被及时调用。我确实使用了setTimeout,它确实可以工作,但这是非常困难的。这只是有时有效,您需要等待大约.03秒才能调用它,setTimeout可以工作,但您可能需要CallLater实用程序类来为您处理此问题。如果您需要一个运行良好的函数,请给我发消息…callLatermyList.ensureIndexIsVisible,[myData.length-1]在某些情况下仍会引发异常这只是有时有效,您需要等待大约.03秒才能调用此函数,setTimeout有效,但您可能需要CallLater实用程序类来处理此问题。如果您需要一个运行良好的,请给我发消息…callLatermyList.ensureIndexIsVisible,[myData.length-1]在某些情况下仍然抛出异常一点解释会使您的帖子更有价值;一点解释会让你的文章更有价值;