flex 的 list 中相互拖拉产生的问题

假如你有需要定义两个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);
                }
            }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值