滚动到选择的项目在Flex 4中Spark List组件(Scroll to selected it

2019-08-31 07:27发布

我设置选定的元素在S:List组件与ActionScript中,它的工作原理,但列表不滚动到选定的项目 - 需要在滚动条或鼠标滚动。 是否有可能自动滚动到选定的项目? 谢谢 !

Answer 1:

试试s:List法ensureIndexIsVisible(参数index:int):无效 。



Answer 2:

火花:

list.ensureIndexIsVisible(index);



Answer 3:

此功能将滚动到Flex中4+列表的顶部。 这需要在考虑该项目的高度,因此它将在不同的项目具有不同的高度名单运作。

private function scrollToIndex(list:List,index:int):void
{
    if (!list.layout)
        return;

    var dataGroup:DataGroup = list.dataGroup;

    var spDelta:Point = dataGroup.layout.getScrollPositionDeltaToElement(index);

    if (spDelta)
    {
        dataGroup.horizontalScrollPosition += spDelta.x;
        //move it to the top if the list has enough items
        if(spDelta.y > 0)
        {
            var maxVSP:Number = dataGroup.contentHeight - dataGroup.height;
            var itemBounds:Rectangle = list.layout.getElementBounds(index);
            var newHeight:Number = dataGroup.verticalScrollPosition + spDelta.y 
            + dataGroup.height - itemBounds.height;
            dataGroup.verticalScrollPosition = Math.min(maxVSP, newHeight);
        }
        else
        {
            dataGroup.verticalScrollPosition += spDelta.y;

        }
    }
}


Answer 4:

//try this
this.callLater(updateIndex);//where you want to set the selectedIndex

private function updateIndex():void
{
    list.selectedIndex = newIndex;
    list.ensureIndexIsVisible(newIndex);
}


Answer 5:

在柔性-3有一个scrollToIndex方法,因此你可以调用

list.scrollToIndex(list.selectedIndex);

我相信这应该弯曲-4工作了。



Answer 6:

这为我工作。 有需要使用callLater。

list.selectedItem = "MyTestItem"; //or list.selectedIndex = 10;
this.callLater(updateIndex); //dispatch an update to list

private function updateIndex():void {
    list.ensureIndexIsVisible(list.selectedIndex);
}


Answer 7:

我看到这个基本的想法在这里... http://arthurnn.com/blog/2011/01/12/coverflow-layout-for-flex-4/

public function scrollGroup( n : int ) : void
{
    var scrollPoint : Point = theList.layout.getScrollPositionDeltaToElement( n );
    var duration : Number = ( Math.max( scrollPoint.x, theList.layout.target.horizontalScrollPosition ) - Math.min( scrollPoint.x, theList.layout.target.horizontalScrollPosition )) * .01;
    Tweener.addTween(theList.layout,{ horizontalScrollPosition: scrollPoint.x , time:duration});
}
protected function theList_caretChangeHandler(event:IndexChangeEvent):void
{
    scrollGroup( event.newIndex );
    event.target.invalidateDisplayList();
}


Answer 8:

您可能需要直接访问列表的滚动条,并做一些这样的:

list.scroller.scrollRect.y = list.itemRenderer.height * index;



Answer 9:

你可以通过它的索引乘以元素的高度,并通过该值设置为:

yourListID.scroller.viewport.verticalScrollPosition


Answer 10:

这是一个错误-你可以看到演示和解决方法在https://issues.apache.org/jira/browse/FLEX-33660



Answer 11:

这个自定义列表组件扩展为我工作:

<s:List
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    valueCommit="callLater(ensureIndexIsVisible, [selectedIndex])">
</s:List>


Answer 12:

我最近有我的组中的项目定义的大小来实现这在我的项目之一..

<s:Scroller x="940" y="0" maxHeight="465" maxWidth="940" horizontalScrollPolicy="off" verticalScrollPolicy="off">
  <s:HGroup  id="tutPane" columnWidth="940" variableColumnWidth="false" gap="0" x="0" y="0">
  </s:HGroup>
</s:Scroller>

继通过增加私人“targetindex”变量工作了操纵这是我的按钮控件,然后我叫checkAnimation功能,它使用了动画类,康宝与SimpleMotionPath和tutpane.firstIndexInView与目标指数之间的比较。 这修改了该组的“horizo​​ntalScrollPosition的”。

这使得单独的控制基本上充当一个滚动条,但我有滑动控制的要求,查看所选择的项目。我相信这种技术可以为项目的自动选择以及工作



文章来源: Scroll to selected item in Flex 4 Spark List component