ListBase进行拖拽时collectionChangeHandler()报错的解决方法

在基于ListBase进行拖拽以移动对象时, 时常会出现如下错误:png-0673

TypeError: Error #1009: Cannot access a property or method of a null object reference.

at mx.controls.listClasses::ListBase/collectionChangeHandler()
[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\controls\listClasses\ListBase.as:8190]

如下图,
tileListSource - 存放来源对象的容器 - dataProvider为sourceDP : ListCollectionView

tileListTarget - 拖拽的目标容器, 在次Drag后, 仅执行右侧容器的清空操作

image

因此在鼠标选中所有成员, 鼠标移动到Target上, Drop时, 要执行操作: 将sourceDP清空, 但在清空时, ListCollectionView会派发ListCollectionEvent.REMOVE事件, ListBase会进行响应, 但ListBase在响应时, 有时会无法正常处理, 产生上文所述错误.

Debug时使用callLater与sourceDP.disableAutoUpdate()均不奏效, 最后找到的解决方法:

如下:

1. 首先设置tileListSource.selectedItem = null; // 防止在第二步时报错

2. 设置sourceDP.list = null, 并进行操作

3. 操作结束, 将sourceDP 的list重置为第2步之前的对象.