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 时向下滚动
我可以在 Flex 中捕获键盘事件,而无需强制用户点击舞台吗?