0


0

Sparkタイルリストでのドラッグアンドドロップ

ユーザーが手動でリストの順序を変更できるように、スパークタイルリストでドラッグアンドドロップを開始しようとしています。 問題は、ドラップアンドドロップするたびに、ドロップ/ドラッグされたエントリが複製されることです。

私の主なアプリケーションは次のとおりです。


ファイルに含まれるもの:

import com.Sequence;

import mx.collections.ArrayCollection;
import mx.core.ClassFactory;
import mx.core.FlexGlobals;

import spark.components.List;
import spark.layouts.TileLayout;

public var main:List=new List()
public var ok: ArrayCollection = new ArrayCollection( [
    {label:"1-redblue", data:"redblue"},
    {label:"2-ncview", data:"ncview"},
    {label:"3-greyscale", data:"greyscale"},
    {label:"4-alg2", data:"alg2"},
    {label:"5-alg", data:"alg"},
    {label:"6-occam", data:"occam"},
    {label:"7-rainbow", data:"rainbow"},
    {label:"8-sst_36", data:"sst_36"},
    {label:"9-occam_pastel-30", data:"occam_pastel-30"},
    {label:"10-ferret", data:"ferret"}
]);

// ActionScript file
public function initApp(){

    var lay:TileLayout=new TileLayout()
    var ae:ClassFactory=new ClassFactory(Sequence)

    main.layout=lay
    main.dataProvider=ok
    main.dragEnabled=true
    main.dropEnabled=true
    main.width=FlexGlobals.topLevelApplication.width
    main.height=FlexGlobals.topLevelApplication.height
    main.itemRenderer=ae

    this.addElement(main);

}

そして、私のアイテムレンダラーは次のようになります:

package com
{
    import mx.controls.TextArea;
    import mx.events.FlexEvent;

    import spark.components.BorderContainer;
    import spark.components.supportClasses.ItemRenderer;

    public class Sequence extends ItemRenderer
    {
        private var borderC:BorderContainer=new BorderContainer()
        private var labeli:TextArea=new TextArea()
        private var d:Object

        public function Sequence()
        {
            super();
            this.addElement(borderC)
            this.addEventListener(FlexEvent.CREATION_COMPLETE,doIT)
            borderC.width=borderC.height=100
            labeli.width=labeli.height=100
            borderC.addElement(labeli)

        }

        override public function set data(d:Object):void{
            this.d=d
        }

        override public function get data():Object{
            return d;
        }

        private function doIT(e:FlexEvent):void{
            labeli.text =String(d.label);
        }

    }
}

2 Answer


3


同じコンポーネント内で(複製せずに)ドラッグ/ドロップできるプロパティは、allowDragMoveがtrueに設定されている場合、複製は発生しません。


3


@gpasseは私を正しい方向に導きました。

Flex 4.6のスパークリストでは、次のフィールドを「true」に設定する必要があります。

dragEnabled="true"
dragMoveEnabled="true"
dropEnabled="true"