Actionscript / Flex: как сохранить выбранный элемент (вместо индекса) после сортировки списка Spark - PullRequest
2 голосов
/ 19 января 2011

Я меняю предмет в Списке Искр. Затем элемент перемещается к другому индексу в списке, поскольку я сохраняю сортировку dataProvider в Списке. Однако selectedIndex остается там, где был элемент. Я хочу, чтобы выбранный индекс List по-прежнему находился в элементе, который изменился. Кто-нибудь решал эту проблему раньше или есть советы?

1 Ответ

1 голос
/ 01 февраля 2011

Спасибо всем, я наконец-то решил это. Для потомков это то, что я сделал:

В моем подклассе Spark List я перезаписываю set dataProvider и присоединяю слушателя событий со слабой ссылкой к dataProvider.

    override public function set dataProvider(theDataProvider:IList):void
    {
        super.dataProvider = theDataProvider;
        dataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE, onCollectionChange, false, 0, true);
    }

Затем в обработчике событий, если перемещенный элемент был ранее выбран, я повторно его выбираю. См. Дело CollectionEventKind.MOVE.

    private function onCollectionChange(theEvent:CollectionEvent):void
    {
        if (theEvent.kind == CollectionEventKind.ADD)
        {
            // Select the added item.
            selectedIndex = theEvent.location;
        }
        else if (theEvent.kind == CollectionEventKind.REMOVE)
        {
            // Select the new item at the location of the removed item or select the new last item if the old last item was removed.
            selectedIndex = Math.min(theEvent.location, dataProvider.length - 1);
        }
        else if (theEvent.kind == CollectionEventKind.MOVE)
        {
            // If the item that moved was selected, keep it selected at its new location.
            if (selectedIndex == theEvent.oldLocation)
            {
                selectedIndex = theEvent.location;
            }
        }   
    }
...