最近想实现一个list双击编辑其项目的效果。查了一下帮助文档。看到一个createItemEditor()
方法:
createItemEditor():
使用由 itemEditor 属性指定的编辑器在 editedItemPosition 为项目渲染器创建项目编辑器。
此方法将编辑器实例设置为 itemEditorInstance 属性。
您只能从 itemEditBegin 事件的事件侦听器中调用此方法。若要在其它时间创建编辑器,请设置editedItemPosition 属性以生成 itemEditBegin 事件。
在ListEvent.ITEM_DOUBLE_CLICK监听函数中试了几次,没有实现效果,注意到上面有句话“若要在其它时间创建编辑器,请设置 editedItemPosition 属性以生成 itemEditBegin 事件。”于是将注意力转移到editedItemPosition上。
帮助文档中是这么解释editedItemPosition属性的:
正在编辑的数据提供程序项目的项目渲染器的列索引和行索引(如果有)。
此 Object 包含 columnIndex 和 rowIndex 这两个字段,分别是项目的从零开始的列索引和项目索引。对于 List 控件,columnIndex 属性始终为 0;例如:{columnIndex:0,rowIndex:3}。
设置此属性会将项目滚动到视图中,并会调度itemEditBegin 事件以打开指定项目上的项目编辑器。
此属性可用作数据绑定的源。
所以就在DOUBLE_CLICK中指定了该属性。并在这之前打开了list的editable属性,在编辑完之后(ListEvent.ITEM_EDIT_END)将editable设回为false 。这样就实现了双击编辑list的效果。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:List id="list" x="146" y="90" width="225" height="250" labelField="name" doubleClickEnabled="true">
<mx:dataProvider>
<mx:Array>
<mx:Object name="tian" />
<mx:Object name="zhang" />
<mx:Object name="diao" />
<mx:Object name="zeng" />
</mx:Array>
</mx:dataProvider>
</mx:List>
<mx:Script>
<![CDATA[
import mx.events.ListEvent;
private function init():void
{
list.addEventListener(ListEvent.ITEM_DOUBLE_CLICK , onDoubleClick ) ;
list.addEventListener(ListEvent.ITEM_EDIT_END , onEnd ) ;
}
private function onDoubleClick(event:ListEvent):void
{
list.editable = true ;
var editedPosition:Object = new Object() ;
editedPosition.columnIndex = event.columnIndex ;
editedPosition.rowIndex = event.rowIndex ;
list.editedItemPosition = editedPosition ;
}
private function onEnd(event:ListEvent):void
{
list.editable = false ;
}
]]>
</mx:Script>
</mx:WindowedApplication>