ensureIndexVisible(),滚动到List控件的顶部?

时间:2011-02-27 22:55:50

标签: flash list flex4

我正在使用FB4,显然我需要使用ensureIndexIsVisible()滚动到我的s:List中的特定项目。无论如何,下面的代码成功滚动到项目,但不会将其滚动到列表的顶部(它位于底部,并在某种程度上切断)。反正有吗?

MXML:

<s:List id="Schedule" dataProvider="{schedule}" creationComplete="creationCompleteHandler(event)"/>

AS3:

protected function creationCompleteHandler(event:Event):void {
    var d:Date = new Date();
    var today:String = String((d.month + 1) + "/" + d.date + "/" + d.fullYear);
    var dP:XMLListCollection = event.currentTarget.dataProvider;
    for(var i:uint; i < dP.length; i++){
        if(dP.child("date")[i] == today){
            event.currentTarget.ensureIndexIsVisible(i);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

糟糕的解决方案,但它对我有用

var pt:Point = list.layout.getScrollPositionDeltaToElement(i);
while (pt) {
    list.validateNow();
    if (pt.y > 0) {
        var delta:int = list.layout.getVerticalScrollPositionDelta(NavigationUnit.DOWN);
    } else {
        delta = list.layout.getVerticalScrollPositionDelta(NavigationUnit.UP);
    }
    list.layout.verticalScrollPosition += delta;
    pt = list.layout.getScrollPositionDeltaToElement(i);
}

答案 1 :(得分:1)

能够找到一个更简单的解决方案 - 在此处发布,因为没有其他人似乎在网上发布了类似的内容。

方法 spark.layouts.supportClasses.LayoutBase #getScrollPositionDeltaToElementHelper 允许传入topOffset,但默认实现传递NaN。如果创建一个通过&#34; 0&#34;作为topOffset,然后在List上调用 ensureIndexIsVisible 将导致该索引处的项目顶部对齐。

请参阅下面的自定义布局类:

public class ScrollToElementVerticalLayout extends VerticalLayout
{   
    public override function getScrollPositionDeltaToElement(index:int):Point
    {
        // pass 0 as the topOffset so the element aligns with the top of the list
        return getScrollPositionDeltaToElementHelper(index, 0);
    }
}

答案 2 :(得分:0)

这是Flex 4中Spark列表的简单单行程序:

list.layout.verticalScrollPosition = list.layout.getElementBounds(list.selectedIndex).y;