2011-02-27 72 views
1

我正在使用FB4,显然我需要使用ensureIndexIsVisible()滚动到我的s:List中的特定项目。无论如何,下面的代码成功地滚动到该项目,但不会滚动到列表的顶部(它在底部,并有点切断)。无论如何要这样做?ensureIndexIsVisible(),滚动到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); 
     } 
    } 
} 

回答

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

能制定出一个简单的解决方案 - 在这里张贴作为没有人似乎在网上发布了类似的东西。

方法spark.layouts.supportClasses.LayoutBase#getScrollPositionDeltaToElementHelper允许传入topOffset,但默认实现传递NaN。如果创建一个通过“0”作为topOffset的自定义布局,然后在列表上调用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); 
    } 
} 
0

这里是Flex 4中一个简单的一行提供了Spark列表:

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