假如你有需要定义两个list,并且希望把一个list1 的内容拖到另一个list2中,并且list1的内容不变,而且list2中内容可以重复,而且list2可以通过在内部拖拉以达到调整顺序的目的。
因为两个 list 要相互拖拉必须都定义dropEnabled="true" dragEnabled="true" 那么要保证在内部拖拉不会出问题的话必须得判断你拖拉的源list和目标list,然后判断是不是同一个!
用方法var SDrag:List = event.dragInitiator as List ;var dropTarget:List=List(event.currentTarget);
主要代码如下:由于商业应用,所以不能提供整个项目。
<mx:List height="410" width="200" id="mediaList"
dataProvider="{mdp}"
itemRenderer="com.controls.Movieitem"
doubleClickEnabled="true"
dropEnabled="true"
dragEnabled="true"
dragMoveEnabled="false"
dragDrop="doDropHandler(event)"
doubleClick="mediaPlay()" />
<mx:List height="410" width="200" id="mediaScheduleList"
dataProvider="{nmsdp}"
itemRenderer="com.controls.Movieitem"
dragMoveEnabled="true"
dragEnabled="true"
dropEnabled="true"
doubleClickEnabled="true"
doubleClick="mediaPlayOther()"
dragDrop="doDragDrop(event)"/>
private function doDragDrop(event:DragEvent):void {
//event.currentTarget
//flag="MEDIASCHEDULELIST";
var SDrag:List = event.dragInitiator as List ;
if(List(event.currentTarget)==mediaScheduleList && SDrag==mediaScheduleList)
{
Alert.show("vvvv","右边拉来拉去");
//逆向考虑
}
else{ //检测数据结构
Alert.show("右边拉来拉去222","右边拉来拉去222");
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 m:Media = new Media();
m.fill(itemsArray[0] as Media);
//获取插入位置
var dropLoc:int = dropTarget.calculateDropIndex(event);
//插入项
//IList(dropTarget.dataProvider).addItemAt(m, dropLoc);
nmsdp.addItemAt(m, dropLoc);
//Alert.show("abc",nmsdp[dropLoc].Thumb);
}
mdp.refresh();
}
}
private function doDropHandler(event:DragEvent):void
{
var SDrag:List = event.dragInitiator as List ;
var dropTarget:List=List(event.currentTarget);
if (dropTarget==mediaList && SDrag==mediaList )
{
//Alert.show("从左边拉到左边","从左边拉到左边");
mdp.refresh();
var gid:String="admin";//测试
myMoviesSchedule.getMediaByGroup.send(gid);
}
else
{
//把右列表的媒体ARRAY减少一个.刷新dataprovider以达到 代替重新搜寻数据库
//this.addMediaSchedule();
mdp.refresh();
//var select:String=mediaScheduleList.selectedItem.MediaID.toString();
nmsdp.removeItemAt(mediaScheduleList.selectedIndex);
}
}