Apache flex Flex 3:覆盖可编辑列表的keyDownHandler提供焦点问题
我试图覆盖可编辑列表的“向上”键和“向下”键的默认处理,这样,当按下它们时,正在编辑的列表条目的行为就好像按下了转义键,但“选定项栏”会向上或向下移动 以下是我的简化组件:Apache flex Flex 3:覆盖可编辑列表的keyDownHandler提供焦点问题,apache-flex,list,overriding,handler,keydown,Apache Flex,List,Overriding,Handler,Keydown,我试图覆盖可编辑列表的“向上”键和“向下”键的默认处理,这样,当按下它们时,正在编辑的列表条目的行为就好像按下了转义键,但“选定项栏”会向上或向下移动 以下是我的简化组件: <?xml version="1.0" encoding="utf-8"?> <mx:List xmlns:mx="http://www.adobe.com/2006/mxml" enabled="true" width="100%" height="100%" creationCompl
<?xml version="1.0" encoding="utf-8"?>
<mx:List xmlns:mx="http://www.adobe.com/2006/mxml"
enabled="true" width="100%" height="100%"
creationComplete="initialise()"
editable="true"
>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private function initialise():void
{
dataProvider = new ArrayCollection(["this", "is", "a", "very", "simple", "example"]);
}
override protected function keyDownHandler(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.ESCAPE
|| event.keyCode == Keyboard.DOWN
|| event.keyCode == Keyboard.UP)
endEdit("ENDEDIT"); // Same behaviour with destroyItemEditor();
super.keyDownHandler(event);
//callLater(this.setFocus);
}
]]>
</mx:Script>
由于某些原因,这不起作用:如果正在编辑行,则第一次“向上”或“向下”键将结束编辑并移动条。进一步的向上或向下按键没有效果,但是如果你点击列表附近的某个地方,它就会开始工作。这让我觉得这是一个焦点问题。奇怪的是,如果你点击escape,编辑完成,你可以正确地上下移动
如果取消对“callLater”行的注释以尝试使列表保持焦点,则该栏最初会沿按键方向移动,但随后会再次向后移动并重新编辑原始行
有人有什么想法吗
提前感谢,
Mike我一直在尝试追踪来源,为endEdit调用提供的唯一“原因”是始终ListentReason.CANCELLED,这可能是您的问题
这仍然适用于转义键的原因是,它是由列表的EditWorkeyDownHandler函数处理的,它是private nah nah,您不能覆盖我。您必须扩展列表以覆盖继承的向下键行为。但是,我在单击一行后使其第一次向上或向下运行,但我似乎无法继续后续的向下键事件:
<?xml version="1.0" encoding="utf-8"?>
<mx:List xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="{creationCompleteHandler()}">
<mx:Script>
<![CDATA[
override protected function keyDownHandler(event:KeyboardEvent):void
{
if (itemEditorInstance)
{
destroyItemEditor();
if (event.keyCode == Keyboard.UP)
{
if (selectedIndex == 0)
{
selectedIndex = this.dataProvider.length - 1;
}
else
{
selectedIndex--;
}
}
else if (event.keyCode == Keyboard.DOWN)
{
if (selectedIndex == this.dataProvider.length - 1)
{
selectedIndex = 0;
}
else
{
selectedIndex++;
}
}
}
super.keyDownHandler(event);
}
]]>
</mx:Script>