2

リスト コンポーネントで複数の選択を許可するにはどうすればよいですか?ただし、許可される選択の最大数は事前定義された数に基づいていますか?

私がこれまでに得たのは...最初に選択の最大数を定義します:

プライベート var numberOfYearsCanSelect:int = 3;

List コンポーネントで allowMultipleSelection = true を設定しました。

リスト コンポーネントの変更時に、ユーザーが選択できる範囲を超えて選択したかどうかを確認するロジックを追加し、選択した場合は、選択できる最大数に等しい selectedItems の長さを設定しました。

            if (event.currentTarget.selectedIndices.length > numberOfYearsCanSelect)
            {
                var arr:Vector.<Object>=event.currentTarget.selectedItems;
                arr.length=numberOfYearsCanSelect;
                event.currentTarget.selectedItems=arr;
            }

これに関する問題は、何らかの理由で、selectedItems を設定したときにリストが更新されないことです。これにより、必要な数を選択できます。

私がやりたいことは、ユーザーが許可されている以上のものを選択すると、その数だけが選択され、残りは選択されないということです。

ビューを機能させるには、ビューである種のリストの更新を行う必要があるかもしれません。または、リストクラスを拡張していくつかのメソッドをオーバーライドしてカスタムリストを作成する必要がありますか?

ありがとう

4

1 に答える 1

1

サブクラス化Listが最も簡単な解決策だと私には思えます。あとは、提案された選択項目の数が最大値を超えたときに、ユーザーの選択がコミットされないようにするだけです。

このような何かがうまくいくはずです:

use namespace mx_internal;

public class LimitedList extends List {

    public var maxSelectedItems:int = 3;

    override public function initialize():void {
        super.initialize();
        allowMultipleSelection = true;
    }

    override mx_internal function setSelectedIndices(
            value:Vector.<int>,
            dispatchChangeEvent:Boolean = false,
            changeCaret:Boolean = true):void
    {
        if (!value || value.length <= maxSelectedItems)
            super.setSelectedIndices(value, dispatchChangeEvent, changeCaret);
    }

}

もちろん、これを完全に再利用可能なコンポーネントにするには、さらに微調整を行う必要がありますが、これを出発点 (または 1 回限り) として使用できます。

于 2012-09-28T14:59:23.800 に答える