0

我正在使用绑定到此类实例的火花列表控件:

[Event(name="collectionChange", type="mx.events.CollectionEvent")]
public class HierarchicalCollectionListAdapter extends EventDispatcher implements IList
{
...
}

每次当这个集合发送“reset”collectionChange 事件时,我想让 List 完全重新绘制。现在要实现这一点,每次集合更新后我都必须调用此代码:

var _itemRenderer:IFactory = _list.itemRenderer;
_list.itemRenderer = null;
_list.itemRenderer = _itemRenderer; 

有没有办法以更优雅的方式做到这一点?

4

2 回答 2

0

如果有人遇到同样的问题,我会在这里留下我的解决方案。

我能做的最好的事情 - 创建扩展列表控件,每次更新集合时都会自行刷新。因此,基于火花列表创建新控件并在此处添加以下代码:

<fx:Script>
    <![CDATA[
        import mx.collections.IList;
        import mx.events.CollectionEvent;
        import mx.events.CollectionEventKind;

        /**
         * Subscribe to collection change event.
         */
        override public function set dataProvider(value:IList):void
        {
            if (dataProvider)
                dataProvider.removeEventListener(CollectionEvent.COLLECTION_CHANGE,
                    dataProvider_collectionChangeHandler);

            if (value)
                value.addEventListener(CollectionEvent.COLLECTION_CHANGE, _collectionChangeHandler, false, 0, true);

            var _itemRenderer:IFactory = this.itemRenderer;
            this.itemRenderer = null;
            this.itemRenderer = _itemRenderer; 

            super.dataProvider = value;
        }

        /**
         * If collection has changed - redraw list by resetting itemRenderer.
         */
        private function _collectionChangeHandler(event:Event):void
        {
            if (event is CollectionEvent)
            {
                var ce:CollectionEvent = CollectionEvent(event);

                // We don't need to refresh if any collection element will change.
                if(ce.kind != CollectionEventKind.UPDATE)
                {
                    var _itemRenderer:IFactory = this.itemRenderer;
                    this.itemRenderer = null;
                    this.itemRenderer = _itemRenderer;
                }
            }
        } 

    ]]>
</fx:Script>
于 2013-01-25T06:27:31.107 回答
0

我很难看到这里发生了什么,但看起来你的列表dataProvider没有扩展,ListCollectionView所以你不能使用refresh()

但是,您可以使用强制重绘invalidateDisplayList()

我会尝试这样的事情:

_list.dataGroup.invalidateDisplayList();
于 2013-01-24T03:53:04.540 回答