Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex 3:覆盖可编辑列表的keyDownHandler提供焦点问题_Apache Flex_List_Overriding_Handler_Keydown - Fatal编程技术网

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>