J'ai une liste Spark (spark.components.List
) soutenue par un ArrayCollection pour son dataProvider. La liste a une barre de défilement verticale lorsqu'il y a trop de lignes à afficher. Ce que je veux c'est quand une nouvelle ligne est ajoutée à la liste pour qu'elle défile vers le bas pour montrer cette nouvelle ligne.Flex Spark List défile vers le bas lorsque de nouvelles données sont ajoutées
J'ai essayé d'appeler la liste ensureIndexIsVisible
d'un écouteur sur ArrayCollection. Cela ne fonctionne pas car la liste n'a pas encore entièrement rendu la nouvelle ligne. Il soit faites défiler jusqu'à la seconde de la dernière ligne, ou jeter l'exception:
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]
Je me suis assuré que mon écouteur est ajouté à la ArrayCollection après la mise en dataProvider Liste. L'espoir est que j'appellerais ensureIndexIsVisible
après que la liste ait eu l'occasion de traiter la nouvelle rangée. Ma conjecture est que la liste ne rend pas la ligne jusqu'à quelque événement de redessiner qui se produit plus tard (après que j'ai appelé ensureIndexIsVisible
).
J'ai également essayé de spécifier un VerticalLayout
et de définir son verticalScrollPosition
à un nombre trop grand (comme 99999). Cela a le même problème - il défile à la seconde de la dernière rangée.
Alors, existe-t-il un moyen de faire défiler jusqu'à une nouvelle ligne ajoutée dans une liste Spark? Le seul que j'ai pu trouver sur Internet est ce poorly formatted flexcoders thread.
Avez-vous essayé d'appeler 'ensureIndexIsVisible()' dans un 'callLater'? Comme 'callLater (function(): void {ensureIndexIsVisible (lastIndex)});' –
Oui, j'ai essayé cela et cela n'a pas fonctionné, apparemment callLater n'est pas appelé plus tard.J'ai utilisé setTimeout et ça marche, mais c'est très bizarre. –