sureIndexIsVisible (), прокрутить к вершине элемента управления List? - PullRequest
1 голос
/ 28 февраля 2011

Я использую 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 ]

1 голос
/ 13 декабря 2011

Был в состоянии выработать более простое решение - опубликовать его здесь, так как никто другой, похоже, не разместил нечто подобное в Интернете.

Метод spark.layouts.supportClasses.LayoutBase # getScrollPositionDeltaToElementHelper допускает передачу topOffset, но реализация по умолчанию передает NaN.Если создать пользовательский макет, который передает «0» в качестве topOffset, то вызов sureIndexIsVisible в вашем Списке приведет к выравниванию элементов по этому индексу.

См. Ниже класс пользовательских макетов:

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);
    }
}
1 голос
/ 13 марта 2011

Плохое решение, но оно работает для меня

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);
}
0 голосов
/ 06 апреля 2014

Вот простой однострочный список для Spark List в Flex 4:

list.layout.verticalScrollPosition = list.layout.getElementBounds(list.selectedIndex).y;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...