Frage

Ich gründe ausgewähltes Element in s: List-Komponente mit Actionscript, es funktioniert, aber Liste blättert nicht auf ausgewählte Artikel - muß mit Scrollbar oder Maus scrollen. Ist es möglich, auto-scroll zu ausgewählten Artikeln? Dank!

War es hilfreich?

Lösung

Andere Tipps

Für Funken:

list.ensureIndexIsVisible(index);

Diese Funktion wird an die Spitze der Liste in Flex 4 + blättern. Es dauert in Rechnung, die Höhe des Elements, so wird es für Listen mit verschiedenen Gegenständen mit unterschiedlicher Höhe arbeiten.

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;

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

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

In flex-3 gibt es eine scrollToIndex Methode und daher können Sie anrufen

list.scrollToIndex(list.selectedIndex);

Ich glaube, dies auch in flex-4 funktionieren soll.

Das funktionierte für mich. hatte die calllater zu verwenden.

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

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

habe ich diese Grundidee hier ... http://arthurnn.com/blog/2011/ 12.01 / Coverflow-Layout-für-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();
}

Sie werden wahrscheinlich wollen die scroller der Liste direkt zugreifen und so etwas wie:

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

Sie können die Höhe eines Elements durch seinen Index multiplizieren und diesen Wert übergeben an:

yourListID.scroller.viewport.verticalScrollPosition

Es ist ein Fehler - Sie die Demonstration und eine Abhilfe bei der https: / /issues.apache.org/jira/browse/FLEX-33660

Diese benutzerdefinierten Komponente List-Erweiterung für mich gearbeitet:

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

ich erreicht dies kürzlich in einem meiner Projekte durch eine definierte Größe für meine Artikel in der Gruppe mit ..

<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>

Im Anschluss an dieser meine Button für die Manipulation funktionierte durch einen privaten „targetindex“ Variable erhöht wird, dann rief ich eine checkAnimation Funktion, die die Animate-Klasse verwendet, in Combo mit einem SimpleMotionPath und einem Vergleich zwischen tutpane.firstIndexInView und Zielindex. Diese modifizierten die „horizontal“ der Gruppe.

Dies erlaubte separater Regler im Wesentlichen als eine Bildlaufleiste wirken, aber ich hatte die Forderung, die Kontrolle über Verschieben das ausgewählte Element .. Ich glaube, diese Technik könnte für die automatisierte Auswahl von Elementen arbeiten und

anzuzeigen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top