Domanda

Sto impostando l'elemento selezionato in s: Componente Elenco con Actionscript, funziona, ma Elenco non scorre fino all'elemento selezionato - è necessario scorrere con la barra di scorrimento o il mouse. È possibile scorrere automaticamente verso l'elemento selezionato? Grazie!

È stato utile?

Soluzione

Prova il metodo s: List sureIndexIsVisible (index: int): void .

Altri suggerimenti

Per Spark:

list.ensureIndexIsVisible (indice);

Questa funzione scorrerà in cima all'elenco in Flex 4+. Tiene conto dell'altezza dell'elemento, quindi funzionerà per elenchi con elementi diversi con altezza diversa.

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 esiste un metodo scrollToIndex e quindi puoi chiamare

list.scrollToIndex(list.selectedIndex);

Credo che dovrebbe funzionare anche in Flex-4.

Questo ha funzionato per me. ho dovuto usare callLater.

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

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

Ho visto questa idea di base qui ... http://arthurnn.com/blog/2011/ 12/01 / coverflow-layout per i-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();
}

Probabilmente vorrai accedere direttamente allo scroller dell'elenco e fare qualcosa del tipo:

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

Puoi moltiplicare l'altezza di un elemento per il suo indice e passare questo valore a:

yourListID.scroller.viewport.verticalScrollPosition

È un bug: puoi vedere la dimostrazione e una soluzione alternativa alla https: / /issues.apache.org/jira/browse/FLEX-33660

Questa estensione del componente Elenco personalizzato ha funzionato per me:

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

Di recente l'ho realizzato in uno dei miei progetti avendo una dimensione definita per i miei articoli nel gruppo ..

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

In seguito a ciò i miei controlli del pulsante per la manipolazione hanno funzionato incrementando un "targetindex" privato variabile, quindi ho chiamato una funzione checkAnimation, che utilizzava la classe Animate, in combinazione con un SimpleMotionPath e un confronto tra tutpane.firstIndexInView e indice di destinazione. Ciò ha modificato la "posizione orizzontaleScroll". del gruppo.

Ciò ha permesso ai controlli separati di fungere essenzialmente da barra di scorrimento, ma avevo il requisito di far scorrere il controllo per visualizzare l'elemento selezionato. Credo che questa tecnica potrebbe funzionare anche per la selezione automatizzata degli elementi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top