[英]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.