2

在列表组件中,如何允许多项选择,但允许的最大选择数基于预定义的数字?

到目前为止我得到的是......我首先定义了最大选择数:

私有变量 numberOfYearsCanSelect:int = 3;

我在列表组件中设置了 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);
    }

}

当然,需要做一些调整才能使其成为完全可重用的组件,但您可以将其用作起点(或一次性)。

于 2012-09-28T14:59:23.800 回答