`
andyny2006
  • 浏览: 35466 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Flex Array,Arraylist,ArrayCollection使用详解

阅读更多
Flex ArrayArraylistArrayCollection使用详解

1.1.1 Array的申明

//申明arraylist的四种方式

var arr1:Array=new Array("小强","小红","小刚");

var arr2:Array=['小强','小红','小刚'];

var aar3:Array=new Array(

{name:"小强",type:"boy"},

{name:"小红",type:"gril"},

{name:"小刚",type:"boy"});

<fx:Array id="arr4">

<fx:String小强</fx:String>

<fx:String>小红</fx:String>

<fx:String>小刚</fx:String>

</fx:Array>

1.1.2 ArrayList的申明

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

   xmlns:s="library://ns.adobe.com/flex/spark"

   xmlns:mx="library://ns.adobe.com/flex/mx"

   minWidth="955" minHeight="600" creationComplete="appInit(event)">

<s:layout>

<s:VerticalLayout/>

</s:layout>

 

<fx:Script>

<![CDATA[

import mx.collections.ArrayList;

import mx.events.FlexEvent;

import mx.rpc.events.ResultEvent;

[Bindable]

private var arr1:ArrayList;

[Bindable]

private var arr2:ArrayList;

[Bindable]

private var arr3:ArrayList;

 

protected function appInit(event:FlexEvent):void

{

var arr:Array=new Array(

{name:"小强",type:"boy"},

{name:"小红",type:"gril"},

{name:"小刚",type:"boy"});

arr1=new ArrayList();

arr1.addItem({name:"小强",type:"boy"});

arr1.addItem({name:"小红",type:"gril"});

arr1.addItem({name:"小刚",type:"boy"});

arr2=new ArrayList(arr);

this.ser.send();

}

 

protected function OnResultEvent(event:ResultEvent):void

{

this.arr3 = event.result.data.region;

}

 

]]>

</fx:Script>

<fx:Declarations>

<!-- 将非可视元素(例如服务、值对象)放在此处 -->

<s:HTTPService id="ser" result="OnResultEvent(event)" resultFormat="object" url="data/data.xml/>

</fx:Declarations>

<s:ComboBox dataProvider="{arr1}" labelField="name"/>

<s:ComboBox dataProvider="{arr2}" labelField="name"/>

<s:DataGrid id="ag" y="200" width="302" dataProvider="{arr3}">

 

<s:columns>

 

<s:ArrayList>

 

<s:GridColumn dataField="totle" headerText="Totle"/>

 

<s:GridColumn dataField="city" headerText="City"/>

 

<s:GridColumn dataField="state" headerText="State"/>

 

</s:ArrayList>

 

</s:columns>

 

</s:DataGrid>

</s:Application>

 

 

1.1.3 ArrayCollection的申明

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

   xmlns:s="library://ns.adobe.com/flex/spark"

   xmlns:mx="library://ns.adobe.com/flex/mx"

   minWidth="955" minHeight="600" creationComplete="appInit(event)">

<s:layout>

<s:VerticalLayout/>

</s:layout>

<fx:Script>

<![CDATA[

import mx.collections.ArrayCollection;

import mx.events.FlexEvent;

[Bindable]

private var AC1:mx.collections.ArrayCollection;

[Bindable]

private var AC2:mx.collections.ArrayCollection;

[Bindable]

private var AC3:mx.collections.ArrayCollection;

private var arr1:Array;

protected function appInit(event:FlexEvent):void

{

    arr1=new Array(

{name:"小强",type:"boy"},

{name:"小红",type:"gril"},

{name:"小刚",type:"boy"});

AC1=new mx.collections.ArrayCollection(arr1);

 

AC2=new mx.collections.ArrayCollection();

AC2.addItem({name:"小强",type:"boy"});

AC2.addItem({name:"小红",type:"gril"});

AC2.addItem({name:"小刚",type:"boy"});

AC3=new mx.collections.ArrayCollection([

{id:"01",name:"汽车名称",type:"汽车类型",children:[{id:"01-01",name:"大众",type:"汽车"},{id:"01-02",name:"本田",type:"汽车"}]},

{id:"02",name:"书籍名称",type:"书籍类型",children:[{id:"02-01",name:"神话",type:"小说"},{id:"02-02",name:"美女",type:"小说"}]}

]);

 

}

 

]]>

</fx:Script>

<fx:Declarations>

<!-- 将非可视元素(例如服务、值对象)放在此处 -->

</fx:Declarations>

<s:ComboBox dataProvider="{AC1}" labelField="name"/>

<s:ComboBox dataProvider="{AC2}" labelField="name"/>

<s:ComboBox dataProvider="{AC3}" labelField="name"/>

</s:Application>

 

 

1.1.4 XML转换为ArrayCollection

1.1.4.1 第一种直接转换

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

   xmlns:s="library://ns.adobe.com/flex/spark"

   xmlns:mx="library://ns.adobe.com/flex/mx"

   minWidth="955" minHeight="600" creationComplete="appInit(event)">

<fx:Script>

<![CDATA[

import mx.collections.ArrayCollection;

import mx.events.FlexEvent;

import mx.rpc.events.ResultEvent;

[Bindable]

private var home:mx.collections.ArrayCollection;

 

protected function appInit(event:FlexEvent):void

{

this.srv.send();

 

}

 

protected function OnResultEvent(event:ResultEvent):void

{

this.home = event.result.data.region;

}

 

]]>

</fx:Script>

<fx:Declarations>

<!-- 将非可视元素(例如服务、值对象)放在此处 -->

<s:HTTPService id="srv" result="OnResultEvent(event)" resultFormat="object"

   url="data/data.xml"/>

</fx:Declarations>

<s:DataGrid id="ag" y="200" width="302" dataProvider="{home}">

 

<s:columns>

 

<s:ArrayList>

 

<s:GridColumn dataField="totle" headerText="Totle"/>

 

<s:GridColumn dataField="city" headerText="City"/>

 

<s:GridColumn dataField="state" headerText="State"/>

 

</s:ArrayList>

 

</s:columns>

 

</s:DataGrid>

 

</s:Application>

 

注意:

1. 要将XML数据转为ArrayCollection,那么这个XML的数据内容不能写在节点的属性中,而是要作为节点的内容。例如,不能使用下面的写法:<node type=”汽车"name=”宝马"/>

2. XML数据中如果只有一条数据时转成的ArrayCollection会是个空值,节要独处理。

3. 如果对加载的XML指定应用E4X格式,Flex将不会使用ArrayCollection类进行转换,例如,下面的写法无法转为ArrayCollection:

<mx:HTTPService id="ser" url="data/data.xml"  Result="resuleHandler(event)"resultFormat="e4x"/>

4. ArrayCollection作数据源时DataGrid可以不必写DalaCridColumn标签,ArrayCollection每一条数据的所有字段会自动作为DataCrid的各列。这样适合表格列数不确定的情况。

HTTPService获取数据转换为ArrayCollection。但这种方法有局限,首先是条目为1条时会出现问题,如上例中,node节点个数为1时,无法正常显示内容;当node节点个数大于1而某个node的子节点Children的个数为1时,子节点没有显示出来。只有当node节点个数大于1,node的子节点children的个数大于1时,这种方式没有问题。

1.1.4.2 第二种将xml解析为对象

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009

   xmlns:s="library://ns.adobe.com/flex/spark" creationComplete="arrInit(event)"

   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

<fx:Script>

<![CDATA[

import mx.collections.ArrayCollection;

import mx.containers.Form;

import mx.events.FlexEvent;

import mx.rpc.events.ResultEvent;

[Bindable]

private var home:mx.collections.ArrayCollection;

 

protected function arrInit(event:FlexEvent):void

{

this.ser.send();

 

}

 

protected function ResultHandler(event:ResultEvent):void

{

//this.home=event.result.data.region;

var myxml:XML=event.result as XML;

var arr:Array=new Array();

for (var i:int = 0; i < myxml.region.length(); i++) 

{

var obj:Object=new Object();

obj.totle=myxml.region[i].totle;

obj.city=myxml.region[i].city;

obj.state=myxml.region[i].state;

arr.push(obj);

}

this.home=new mx.collections.ArrayCollection(arr);

 

}

 

]]>

</fx:Script>

<fx:Declarations>

<!-- 将非可视元素(例如服务、值对象)放在此处 -->

<s:HTTPService id="ser" result="ResultHandler(event)" resultFormat="e4x" url="data/data.xml/>

</fx:Declarations>

<s:DataGrid dataProvider="{home}">

 

</s:DataGrid>

</s:Application>

 

1.1.5 ArrayCollection转化为XML

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

   xmlns:s="library://ns.adobe.com/flex/spark"

   xmlns:mx="library://ns.adobe.com/flex/mx"

   minWidth="955" minHeight="600" creationComplete="appInit(event)">

<fx:Script>

<![CDATA[

import mx.collections.ArrayCollection;

import mx.collections.HierarchicalData;

import mx.events.FlexEvent;

 

[Bindable]

var arr1:mx.collections.ArrayCollection;

protected function appInit(event:FlexEvent):void

{

// TODO Auto-generated method stub

var arr:mx.collections.ArrayCollection =new mx.collections.ArrayCollection();

arr.addItem({id:"01",name:"大众",type:"汽车"});

arr.addItem({id:"02",name:"宝马",type:"汽车"});

arr.addItem({id:"03",name:"奔驰",type:"汽车"});

 

var root:XML=new XML("<root />");

for (var i:int = 0; i < arr.length; i++) 

{

var node:XML=new XML("<node />");

node.id=arr[i].id;

node.name=arr[i].name;

node.type=arr[i].type;

root.appendChild(node);

}

trace(root);

 

// 定义多个富有子节点

  arr1 =new mx.collections.ArrayCollection([

{id:"01",name:"汽车名称",type:"汽车类型",children:[{id:"01-01",name:"大众",type:"汽车"},{id:"01-02",name:"本田",type:"汽车"}]},

{id:"02",name:"书籍名称",type:"书籍类型",children:[{id:"02-01",name:"神话",type:"小说"},{id:"02-02",name:"美女",type:"小说"}]}

]);

 

var data:XML=new XML("<data />");

for (var i:int = 0; i < arr1.length; i++) 

{

var region:XML=new XML("<node />");

region.id=arr1[i].id;

region.name=arr1[i].name;

region.type=arr1[i].type;

for (var k:int = 0; k < arr1[i].children.length; k++) 

{

var child:XML=new XML("<child />");

child.id=arr1[i].children[k].id;

child.name=arr1[i].children[k].name;

child.type=arr1[i].children[k].type;

region.appendChild(child);

}

data.appendChild(region);

 

}

trace(data);

 

adg.dataProvider=new HierarchicalData(arr1);

 

}

 

]]>

</fx:Script>

<fx:Declarations>

<!-- 将非可视元素(例如服务、值对象)放在此处 -->

</fx:Declarations>

<mx:AdvancedDataGrid id="adg">

<mx:columns>

<mx:AdvancedDataGridColumn dataField="id"/>

<mx:AdvancedDataGridColumn dataField="name"/>

<mx:AdvancedDataGridColumn dataField="type"/>

</mx:columns>

</mx:AdvancedDataGrid>

</s:Application>

 

1.2 数据捆绑

1.2.1 使用{}实现绑定。

在前面的很多例子中都设定过组件的数据源,基本做法是:使用[Bindable]定义一个绑定的变量:

[Bindable]

Private var arr1:Array;

同时,将这个变量作为数据源,使用日来绑定到一个组件上:

<mx: ComBox dataProvider="{arr1}" />

另外,除了可以定义可绑定的变量外,还可以定义可绑定的类,只需要把[Bindable]放在类的声明的上方即可。

1.2.2 使用Binding标签实现绑定。

使用Binding标签实现同{}相同效果。通常情况下,使用{}Binding标签效果是一样的.但是使用Binding标鉴可以实现为同一个目标定义不止据源或者在绑定源处加一个附加表达式绑定到目标处。

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009

   xmlns:s="library://ns.adobe.com/flex/spark"  

   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

<s:layout>

<s:VerticalLayout/>

</s:layout>

 

<fx:Script>

<![CDATA[

 private function bindFunc(val:String):String

{

return "第三个文本框输入的是:"+input3.text;

}

]]>

</fx:Script>

 

<fx:Script>

<![CDATA[

import mx.events.FlexEvent;

]]>

</fx:Script>

<fx:Declarations>

<!-- 将非可视元素(例如服务、值对象)放在此处 -->

</fx:Declarations>

<fx:Binding source="input2.text" destination="input3.text"/>

<s:TextInput x="44" y="82" id="input1"/>

<s:TextInput id="input2" text="{input1.text}"/>

<s:TextInput id="input3"/>

<s:TextInput width="359" text="{bindFunc(input3.text)}"/>

</s:Application>

 

使用对象作绑定数据源

Flex与服务器语言通信时经常用到某个对象作绑定源。例如,使用BlazeDSJavaEE通信,通常就是在ActionScript中创建对象,给对象各属性赋值后映射为Java中的对象传递到POJO java类中进行处理。

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009

   xmlns:s="library://ns.adobe.com/flex/spark" creationComplete="appInit(event)"

   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

<fx:Script>

<![CDATA[

import mx.events.FlexEvent;

import mx.utils.ObjectProxy;

 

private var obj:Object;

[Bindable]

private var objproxy:ObjectProxy;

protected function appInit(event:FlexEvent):void

{

 obj={userName:"admin",passWord:"123"};

objproxy=new ObjectProxy(obj);

}

 

protected function button1_clickHandler(event:MouseEvent):void

{

objproxy.userName=input1.text;

objproxy.passWord=input2.text;

}

 

]]>

</fx:Script>

<fx:Declarations>

<!-- 将非可视元素(例如服务、值对象)放在此处 -->

</fx:Declarations>

<s:Button x="246" y="179" label="测试" click="button1_clickHandler(event)"/>

<s:Label x="171" y="104" text="姓名:"/>

<s:Label x="167" y="144" text="密码:"/>

<s:TextInput id="input1" x="229" y="104"/>

<s:TextInput id="input2" x="229" y="134"/>

<s:Label x="135" y="282" text="用户密码为:"/>

<s:Label x="147" y="241" text="用户名为:"/>

<s:Label x="229" y="241" text="{objproxy.userName}"/>

<s:Label x="229" y="282" text="{objproxy.passWord}"/>

</s:Application>

 

 

Flex中必备

2.1 FlexArrayArrayListArrayCollection区别

简单的说:

Array更新不通知组件
ArrayListArrayCollection更新通知组件
ArrayCollection可以排序sort和过滤filter
ArrayList不能

Array的数据随着时间发生变化的时候,用它作为数据源的组件无法感知这种变化。例如:myArray.push ("new value"); 利用push方法向Array中添加一新的数据,如果一个List列表组件用它作为数据源,List不会增加刚刚添加的这个数据。
而对于ArrayCollection, 当数据发生变化,会通知相应的组件变化。例如:myArrayCollection.addItem ("new item"); ,那么,如果List用它作为数据源,则List列表的内容会增加。

ArrayCollection 实现了ICollectionView接口,它在FLEX中被定义为数据集。他提供了更加强大的搜索,过滤,排序,分类,更新监控等功能。FDK2类也提供了类似的XMLListCollection类。两者的不同点在于,array作为数据源与控件绑定的时候,不会得到控件的更新,除非控件被重绘或者数据源被重新分配,这时候,存储在Collection类的一个array的拷贝会变成一个对象,因此Collection类具有一个特点就是能够处理数据同步。在FLEX4中产生了一种新的数据类型ArrayList.
ArrayList实现了IList 接口,底部用Array用为数据源。本质上,ArrayList是一个轻量级的ArrayCollection。可以用来作为数据源绑定到控件上,与ArrayCollection的不同是,它不能过滤数据。需要注意的是,基于Spark 的控件列表,不能直接用Array用为数据源,必须实现IList接口,这应该也是一种新的数据类型ArrayList 产生的原因之一

分享到:
评论

相关推荐

    C# Array和ArrayList,List区别

    可以使用 `ToArray` 方法将 `ArrayList` 转换为 `Array`: ```csharp ArrayList al = new ArrayList { 1, 2, 3 }; int[] arr = (int[])al.ToArray(typeof(int)); foreach (int item in arr) { Console.WriteLine...

    Java Array与ArrayList区别详解

    Java中的Array和ArrayList是两种不同的数据结构,它们在使用场景和特性上有显著的差异。Array是一种固定大小的数据结构,用于存储同一类型的元素序列,而ArrayList是Java集合框架的一部分,属于List接口的一个实现,...

    .net(c#)中Array和ArrayList的异同点

    4. **性能**:当频繁地添加或删除元素时,ArrayList可能比Array更高效,因为它内部使用了数组并自动处理了数组重分配。 ### Array与ArrayList的比较 #### 共同点: 1. **存储元素**:两者都可以用来存储多个元素。...

    flex_array.rar_flex

    `flex_array` 的设计灵感可能来自于C++中的动态数组(std::vector)或Java中的ArrayList,但它针对C语言的特点进行了优化。在描述中提到“managed in PAGE_SIZE parts”,这表明`flex_array` 是以页(PAGE_SIZE)为...

    C# 中 Array和 ArrayList详解及区别

    C# 中 Array和 ArrayList详解及区别 一、Array 的用法 type[] typename=new type[size];  或者  type[] typename=new type[]{ };  Array类型的变量在声明的同时必须进行实例化(如果初始化至少得初始化数组...

    c#数据结构之array,arraylist,hashtable,dictionary

    C#数据结构之Array、ArrayList、Hashtable、Dictionary C#中有多种数据结构可以用来存储和管理数据,今天我们将讨论四种常用的数据结构:Array、ArrayList、Hashtable和Dictionary。这些数据结构都是_Collections_...

    Java的Array和ArrayList教程by程谱CodeRecipe,适合学过Java入门教程的初学者使用

    在备考AP(Advanced Placement,美国大学预修课程)时,理解和熟练使用Array和ArrayList是必要的,因为这两者是Java编程考试中的常见考点。理解它们的差异和应用场景,能帮助你在编程挑战和项目中做出更优的选择。 ...

    java ArrayList的使用与分析

    【Java ArrayList 使用与分析】 ArrayList 是 Java 集合框架中的一个重要组成部分,它是一个基于数组实现的可变大小的列表。ArrayList 类继承自 AbstractList 类并实现了 List 接口,这意味着它可以被用作一个有序...

    Java中ArrayList的removeAll方法详解

    ArrayList的removeAll方法详解 ArrayList的removeAll方法是一个常用的集合操作方法,该方法可以从一个ArrayList中删除所有在另外一个集合中的元素。但是,在实际开发过程中,removeAll方法的使用需要 thận重,因为...

    java关键字ArrayList详解

    ArrayList内部使用一个Object类型的数组elementData来存储元素。初始时,这个数组可能为空,也可能设置为默认容量(通常是10)。无参构造函数创建的ArrayList,默认容量是0,而非10,但实际创建时会根据需要调整。 ...

    Java中ArrayList的使用方法以及与vector的对比

    Java 中 ArrayList 的使用方法以及与 Vector 的对比 ArrayList 是 Java 中的一种动态数组,它提供了很多有用的特性,例如动态地增加和减少元素,实现了 ICollection 和 IList 接口,灵活的设置数组的大小等。下面...

    java中数组列表ArrayList的使用.doc

    ### Java中数组列表ArrayList的使用详解 #### 一、ArrayList简介 `ArrayList`是Java集合框架中的一个重要组成部分,属于`List`接口的一种实现。它提供了一种动态调整大小的数组,能够有效地存储和操作一系列元素。`...

    详谈Array和ArrayList的区别与联系

    Array和ArrayList的区别与联系 Array是Java中的数组,它是相同数据类型的集合,声明时必须指定数据类型和大小,数组的元素个数是固定的。数组有三种声明方式:int[] a = new int[10]; int a[] = new int[10]; int a...

    《C#入门经典》第十章Array和ArrayList的相关问题!!!问题都在注释里!.docx

    在C#编程中,Array和ArrayList是两种不同的数据结构,分别代表固定大小的数组和动态大小的列表。本文将深入探讨这两个概念,并解答在提供的代码片段中遇到的问题。 首先,Array是C#中的基本类型,它是一个固定大小...

    java中数组列表arraylist的使用.docx

    ### Java中数组列表ArrayList的使用详解 #### 一、ArrayList简介 `ArrayList`是Java集合框架中的一个重要组成部分,属于`List`接口的一种实现。它提供了一种动态调整大小的数组,能够有效地解决传统数组大小固定...

    Java 数组ArrayList常用语法详解

    Java 数组ArrayList常用语法详解 Java 数组ArrayList是Java编程语言中最常用的数据结构之一,用于存储和操作数据。下面是ArrayList的常用语法详解: 一、导入ArrayList 首先,需要在Java程序中导入ArrayList类,...

    JavaScript 实现基础 ArrayList 功能

    虽然JavaScript原生不支持ArrayList,但我们可以利用数组(Array)对象来实现类似的功能。下面将详细介绍如何使用JavaScript来实现基础的ArrayList功能,并探讨在没有参数重载(overload)的情况下如何处理方法的...

    C#_集合类_Array,Arraylist,List,Hashtable,Dictionary,Stack,Queue_学习资料

    本文主要探讨了几个常用的集合类,包括Array、ArrayList、List、Hashtable、Dictionary, TValue&gt;、Stack和Queue,以及它们的特点和应用场景。 1. **数组**(Array):数组是最基本的数据结构,它是一个固定大小的...

    Java中Vector与ArrayList的区别详解

    - 在多线程环境中,如果需要保证线程安全,可以考虑使用`Vector`,但通常更推荐使用`Collections.synchronizedList()`将`ArrayList`转换为线程安全的列表,以避免不必要的性能损失。 - 如果频繁进行插入和删除操作...

Global site tag (gtag.js) - Google Analytics