Flex - 使用键盘拖放列表项

Posted

技术标签:

【中文标题】Flex - 使用键盘拖放列表项【英文标题】:Flex - Drag and Drop of list items using keyboard 【发布时间】:2016-12-19 11:41:01 【问题描述】:

被困在这个问题上几天了。我正在尝试使用键盘事件处理程序在列表之间实现拖放。进展不顺利。这就是我的自动取款机 -

        private function keyboardHandler(event:KeyboardEvent):void 
            if (event.keyCode == Keyboard.SPACE)
                var list : List = List(event.currentTarget);
                var dragInitiator:UIComponent = UIComponent(list.indexToItemRenderer(list.selectedIndex));
                var ds:DragSource = new DragSource();
                ds.addData(list.selectedItem, "listItem");
                DragManager.doDrag(dragInitiator, ds, new MouseEvent(MouseEvent.CLICK));
            
        

<s:Panel title="EXAMPLE"
           
         horizontalCenter="0" verticalCenter="0">
    <s:VGroup left="10" right="10" top="10" bottom="10">
        <s:Label text="DRAG" />
        <mx:List id="dragSource"  color="blue"
                 keyDown="keyboardHandler(event)"
                 change="selectedListItem = List(event.currentTarget).selectedItem"
                 dataProvider="mystates.state"/>
        <s:Label text="DROP" />
        <mx:List id="dropSource"  color="blue"
                 keyDown="keyboardHandler(event)"
                 dataProvider="mystates.state" dropEnabled="true"/>
    </s:VGroup>
</s:Panel>

拖动似乎正在初始化,但它不允许我放在目标列表上(当前使用鼠标进行测试)。使用调试器 - 触发键盘处理程序后的变量如下:

dragInitatior - mx.controls.listClasses.ListItemRenderer (@90c83c1) ds - mx.core.DragSource (@8fe5f01)

有什么想法吗?

【问题讨论】:

【参考方案1】:

我设法对其进行了某种修改,并通过在我的列表项上模拟 MouseDown 事件来开始拖动。

private function customDrag(event:KeyboardEvent):void 
            if (event.keyCode == Keyboard.SPACE)
                var selectedItem:IListItemRenderer = myList.indexToItemRenderer(myList.selectedIndex);
                selectedItem.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
            
        

虽然在我的目标容器上通过键盘执行 dragDrop 事件,但运气不佳。

【讨论】:

以上是关于Flex - 使用键盘拖放列表项的主要内容,如果未能解决你的问题,请参考以下文章

在键盘打开时将项目添加到 RecyclerView 时向下滚动

iOS 上的 Flex 4.6 文本输入键盘

(jQuery Autocomplete)禁用键盘命令?

我可以在 Flex 中捕获键盘事件,而无需强制用户点击舞台吗?

如何使拖放始终在Flex 4 Spark List中复制(永不删除)?

如何使用键盘事件模拟悬停