Flex 4: изменить положение элемента как: список - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть: Список в моем приложении Flex, прикрепленный к ArrayCollection (elements).Я хочу изменить положение одного элемента, поэтому на самом деле я изменяю его индекс предмета, вопрос в том, как выполнить такое действие?

Вот лучший пример:

элемент 1 i: 1 элемент 2 i: 2 элемент 3 i: 3 элемент 4 i: 4

i = index

Внутри элемента находится кнопка с именем "Вверх ", когда я нажимаю на него, например, на элементе 3, это выглядит так:

элемент 1 i: 1 элемент 3 i: 2 элемент 2 i: 3 элемент 4 i: 4

Итак, как мы видим, у нас есть новый индекс для элемента 3 ...

Как я могу добиться этого в ActionScript и увидеть, что элемент перемещен в интерфейсе.

Thx!

Ответы [ 3 ]

2 голосов
/ 17 апреля 2014

В вышеприведенном ответе, установив selectedItem списка в Selected Obj вместо того, чтобы устанавливать selectedIndex списка в newPos, нам не нужно явно изменять или поддерживать любой выбор в ArrayCollection.

публичная функция moveUp (событие: MouseEvent): пусто { var index: Number = myList.selectedIndex;

            if (index > 0) {                
                var obj:Object = elements.getItemAt(index);
                var newPos:Number = index - 1;

                elements.removeItemAt(index);
                elements.addItemAt(obj, newPos);

                myList.selectItem = obj; (instead of myList.selectedIndex = newPos;)
            }
        }
1 голос
/ 20 декабря 2011

если ваша ArrayCollection привязана к вашему списку, я бы изменил arrayCollection прямо так:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            [Bindable]
            public var elements:ArrayCollection = new ArrayCollection([
                {label : "item 1"},
                {label : "item 2"}, 
                {label : "item 3"}, 
                {label : "item 4"} 
            ]);

            public function moveUp(event:MouseEvent):void
            {
                var index:Number = myList.selectedIndex;

                if (index > 0) {                
                    var obj:Object = elements.getItemAt(index);
                    var newPos:Number = index - 1;

                    elements.removeItemAt(index);
                    elements.addItemAt(obj, newPos);

                    myList.selectedIndex = newPos;
                }
            }


            public function moveDown(event:MouseEvent):void
            {
                var index:Number = myList.selectedIndex;

                if (index < elements.length - 1) {
                    var obj:Object = elements.getItemAt(index);
                    var newPos:Number = index + 1;

                    elements.removeItemAt(index);
                    elements.addItemAt(obj, newPos);

                    myList.selectedIndex = newPos;
                }
            }

        ]]>
    </fx:Script>

    <s:layout>
        <s:VerticalLayout/>
    </s:layout>

    <s:List id="myList" labelField="label" dataProvider="{elements}"/>

    <s:HGroup>
        <s:Button label="Move up" click="moveUp(event)"/>
        <s:Button label="Move down" click="moveDown(event)"/>
    </s:HGroup>

</s:WindowedApplication>

Теперь, до вас, чтобы применить ту же логику из вашего пользовательского средства визуализации элементов списка, используя либовызов родительской функции или пользовательского события.Удачи!

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

Первое, что вы должны были сделать, когда увидели, что прикреплен ArrayCollection, это ДОКУМЕНТАЦИЯ

Вы бы видели, что у него есть такие методы, как addItemAt и removeItemAt

Итак, очевидная вещь, которую нужно сделать:

private function moveUp(collection:ArrayCollection, indexToMove:int, numPlaces:int=1) {
    var newIndex:int = indexToMove - numPlaces;
    if(newIndex < 0) {
        newIndex = 0;
    }
    var itemToMove:Object = collection.removeItemAt(indexToMove);
    collection.addItemAt(itemToMove, newIndex);
}
...