2011-02-27 52 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;