5.8.只允许List的某一项可被选中

5.8.1问题
解析列表的dataProvider 以确保某些条目不能被用户选择
5.8.2解决方法
创建一个可以被设置在List 组件的一个子类的filterFunction 属性, 使用mouseEventToItemRenderer 和finishKeySelection 通过filter 函数来检查用户的选择并接受或不接受用户的选择.
5.8.3讨论
为了控制用户选择列表中的某些条目,你需要控制这些条目,使用户可使用鼠标和键盘来选择,鼠标选择相对来说更容易处理一些:若itemRenderer 包含你不想被选择的数据则可以简单地覆盖mouseEventToItemRenderer 方法并返回null,键盘事件的处理更复杂是由于当用户试图使用up 或down 键经过不可选的条目,而你需要将列表中的下一个可选的条目发送给用户。

为你的定制列表类中包含不可选条目的每一个实例来提供定制过滤,简单地创建一个disabledFilterFunction 公有属性,以便用户可以传递一个值,创建成一个定制过滤,例如:
+展开
-ActionScript
public var disabledFilterFunction:Function;

覆盖mouseEventToItemRenderer 方法的工作完成后的返回由MouseEvent 选中的itemRenderer, 而finishKeySelection 键盘选择方法返回由keyboardEvent 选中的itemRenderer
+展开
-XML
<mx:List xmlns:mx="http://www.adobe.com/2006/mxmlwidth="400height="300">
<mx:Script>
<![CDATA[
import flash.events.MouseEvent;
import flash.ui.Keyboard;
import mx.controls.listClasses.IListItemRenderer;
import mx.controls.List;
public var disabledFilterFunction:Function;
private var selectionIsAbove:Boolean;
// we need to catch all mouse events that could change the index
override protected function mouseEventToItemRenderer(event:MouseEvent): IListItemRenderer{
var listItem:IListItemRenderer = super.mouseEventToItemRenderer(event);
if(listItem){
if(listItem.data){
if(disabledFilterFunction(listItem.data)){
return null;
}
}
}
return listItem;
}
//当键盘选择事件结束后,下面捕获的所有键盘事件可以改变索引:
override protected function finishKeySelection():void {
super.finishKeySelection();
var i:int;
var uid:String;
var rowCount:int = listItems.length;
var partialRow:int = (rowInfo[rowCount-1].y +rowInfo[rowCount-1].height > listContent.height) ? 1 : 0;
var item:IListItemRenderer = listItems[caretIndex -verticalScrollPosition][0];
if(item) {
if(item.data) {
if(disabledFilterFunction(item.data)){
//下面使用disabledFilterFunction 属性来决定特定的条目是否允许被选中,若当前条目不允许被选中,代码将定位到另一个可见的被激活的条目。
rowCount = rowCount - partialRow;
var currIndex:int = caretIndex -verticalScrollPosition;
if(selectionIsAbove){
// look up;
i = currIndex - 1;
while(i>0){
item = listItems[i][0];
if(!disabledFilterFunction(item.data)){
selectedIndex = i -verticalScrollPosition;
return ;
}
i--;
}
i = currIndex + 1
while(i<this.rowCount){
item = listItems[i][0];
if(!disabledFilterFunction(item.data)){
selectedIndex = i -verticalScrollPosition;
return;
}
i++;
}
else
{
// look down;
while(i<this.rowCount){
item = listItems[i][0];
if(!disabledFilterFunction(item.data)){
selectedIndex = i -verticalScrollPosition;
return;
}
i++;
}
while(i>0){
item = listItems[i][0];
if(!disabledFilterFunction(item.data)){
selectedIndex = i -verticalScrollPosition;
return;
}
i--;
}
}
}
}
}
}

]]>
</mx:Script>
</mx:List>

加支付宝好友偷能量挖...


评论(0)网络
阅读(84)喜欢(0)flash/flex/fcs/AIR