簡體   English   中英

通過滾動顯示多選下拉列表

[英]Flex multiple selection drop down list with scrolling

我在flex中工作,我在一個自定義下拉列表中放置了復選框,以允許用戶選擇多個選項。 我使用了這個模板

但這沒有滾動,因為如果由於某種原因允許滾動,則復選框開始混亂。 例如,如果您具有選項1到8,並且僅顯示1到5。 您選擇選項1,然后向下滾動以選擇選項7。當您向上滾動復選框時,就像選項3一樣開始切換。 繼續向上和向下滾動,復選框選擇僅會自行更改。 我認為這是一個渲染問題,實際選擇數據根本沒有更改(它只知道選擇了選項1和選項7)。 有想法該怎么解決這個嗎?

    public function onOpen(event:DropDownEvent):void 
    {//load the checkboxes and set the mouse tracker
        activateAllCheckBoxes();
        this.scroller.verticalScrollBar.addEventListener(Event.CHANGE, list_verticalScrollBar_change);
        callLater(observeMouse);
    }   

    private function list_verticalScrollBar_change(evt:Event):void 
    {
        //currentlySelectedCheckBoxes = selectedCheckboxes;
        UpdateCheckBoxesWhenScrolling();
        selectedIndex = -1;
    }

    protected function UpdateCheckBoxesWhenScrolling():void
    {
        for (var c:int = 0; c < dataGroup.numElements; c++) {
            var obj:DropDownCheckBox = dataGroup.getElementAt(c) as DropDownCheckBox;
            if(obj!=null)
            {
                var judgDebtorFromCheckBox:JudgDebtor = (obj.data) as JudgDebtor;
                if(FindInCurrentList(judgDebtorFromCheckBox.JudgmentDebtorId)>0)
                {
                    obj.checkbox.selected = true;
                }
                else
                {
                    obj.checkbox.selected = false;
                }
            }
        }
    }

    private function FindInCurrentList(ID:int):int
    {
        for(var i:int=0;i<currentlySelectedCheckBoxes.length;i++)
        {
            var JD:JudgDebtor = currentlySelectedCheckBoxes.getItemAt(i) as JudgDebtor;
            if(JD.JudgmentDebtorId == ID)
                return 1;
        }
        return -1;
    }

因此,在上面的代碼中,我在下拉菜單中注冊了一個滾動事件偵聽器。 它將更新帶有復選框的下拉條目,並使用一個名為:currentlySelectedCheckBoxes的數組集合。 我調試了UpdateCheckBoxesWhenScrolling函數,它運行良好,換句話說,它將檢查選定的函數,但是由於某種原因,它仍然顯示列表11條目中的錯誤結果,並且僅選擇了第二個,我向下滾動,看不到第二個條目,但是突然之間最后一個條目顯示它已被選中。

發生這種情況是因為下拉列表在滾動時會重用渲染器。 例如,如果您選中了第一個項目並滾動,則該渲染器將重新使用以顯示滾動時可見的項目。 因此,最后一項顯示為選中。 為避免混淆選擇,您將必須在使用的渲染器中執行以下操作

override public function set data(value:Object):void
{
     super.data = value;

     //inspect the property which indicates whether to select the checkbox or not
     //and set the value of selected property accordingly
}

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM