<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%"
	applicationComplete="initApp();">
<mx:Script>
	<![CDATA[
		import mx.events.CollectionEvent;
		import mx.events.DragEvent;
		import mx.managers.DragManager;
		import mx.core.DragSource;
		import mx.collections.IList;
		import mx.collections.ArrayCollection;
		import mx.events.CollectionEventKind;
		
		[Bindable]
		private var data_providerA:ArrayCollection;
		[Bindable]
		private var data_providerB:ArrayCollection;
		
		private function initApp():void{
			data_providerA = new ArrayCollection();
			data_providerB = new ArrayCollection();
			data_providerA.source = [{label:"One",data:"One"},
									{label:"Two",data:"Two"},
									{label:"Three",data:"Three"},
									{label:"Four",data:"Four"},
									{label:"Five",data:"Five"}];
			listA.dragEnabled = true;
			listB.dropEnabled = true;
			listB.addEventListener(DragEvent.DRAG_DROP, dragDropEvent);
			data_providerB.addEventListener(CollectionEvent.COLLECTION_CHANGE, dataBChanged);
		}
		
		private function dragDropEvent(event:DragEvent):void {
			//检测数据结构
			if (event.dragSource.hasFormat("items")){
				//取消默认事件处理                   
				event.preventDefault();
				event.currentTarget.hideDropFeedback(event);
				//获取拖拽接收对象
				var dropTarget:List=List(event.currentTarget);
				//获取拖拽对象数据
				var itemsArray:Array = event.dragSource.dataForFormat("items") as Array;
				//获取拖拽对象数据第一项
				var tempItem:Object = {label: itemsArray[0].label, data: itemsArray[0].data};
				//获取插入位置
				var dropLoc:int = dropTarget.calculateDropIndex(event); 
				//插入项    
				IList(dropTarget.dataProvider).addItemAt(tempItem, dropLoc);
			}
		}
		
		private function dataBChanged(event:CollectionEvent):void{
			tracer("*******data changed********");
			for(var i:Number=0;i<data_providerB.length;i++){
				data_providerB.getItemAt(i).label = (i+1)+". "+data_providerB.getItemAt(i).data;
				if(i>0){
					tracer("item["+(i-1)+"] === item["+i+"]?");
					tracer(data_providerB.getItemAt(i) === data_providerB.getItemAt(i-1));
				}
			}
			tracer("**************************");
		}
		
		private function tracer(msg:*):void{
			output.text += msg.toString()+"\n";
		}
	]]>
</mx:Script>

	<mx:List dataProvider="{data_providerA}"
		height="200" 
		horizontalCenter="-100" 
		id="listA" 
		width="180" top="40">
	</mx:List>
	<mx:List dataProvider="{data_providerB}"
		id="listB" 
		height="200" 
		horizontalCenter="100" 
		width="180" 
 top="40">
	</mx:List>
	<mx:TextArea y="248" width="380" height="200" horizontalCenter="0" id="output"/>
	<mx:Label y="10" text="将左边的列表项拖至右端中" width="380" fontSize="12" horizontalCenter="0"/>
	
</mx:Application>

