关于List
这里有一个如何在适当的地方扩展列表元素 的一个小示例。这个事例用CheckBox(多选框)作为List 的itemRenderer,当你选中一个多选框时,List中的条目会扩展以显示更多的信息。如下图:
这个itemRenderer实际上是一个Canvas容器,它有一个CheckBox子元素。这个itemRenderer使用了状态(states),初始的状态(state)包含这个CheckBox,“扩展了的状态(expandedState)”包含了一个列表。这里使用了一个过渡(tansition),通过Resize效果来隐藏和显示这个列表。
这个列表的variableRowHeight属性(译注:这个属性是个布尔值,表示列表的行高是否可变,如为true则可变)必须设置为true,否则它就不会工作。
主程序
让我们以这个叫作“ExpandList.mxml”的主程序开始吧
程序代码
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="absolute">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
// This collection shows just the title in the list as a CheckBox. When
// one is checked, it expands to review the models array.
[Bindable]
public var dp:ArrayCollection = new ArrayCollection(
[ {title:"Ford", models:["Fusion","Taurus","Mustang"]},
{title:"Volkswagen", models:["Passat","Jetta","Beetle", "Golf", "GTI"]},
{title:"Infiniti",models:["FX35","GX35","Q45","M35"]},
{title:"Audi",models:["A3","A4","A6"]}
]);
]]>
</mx:Script>
<!-- Simple list with 2 important points:
1. variableRowHeight = "true" allows for rows to be of differing height
2. itemRenderer = "DetailItem" specifies the DetailItem.mxml as the renderer
-->
<mx:List dataProvider="{dp}" width="270" height="315"
horizontalCenter="0"
verticalCenter="0"
columnCount="1"
columnWidth="250"
variableRowHeight="true"
itemRenderer="DetailItem"
selectionColor="0xFFFFFF"/>
</mx:Application>
可以看到,脚本块只是定义了一个ArrayCollection,假设这些信息是通过呼叫data services之后得到的返回结果。
这个列表被定义了,并且以这个ArrayCollection作为它的dataProvider,它的variableRowHeight属性也被设成了true。ItemRenderer则被设置成了一个类名:“DetailItem”。
The ItemRenderer
下面将会给出DetailItem 组件。为了更好的可读性,我将会把代码分成几部分。你可以把它们组合起来得到可以工作的代码。
程序代码
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" width="201" height="36">
<!-- This is the base state and it just defines the simple checkbox
-->
<mx:CheckBox x="10" y="10" label="{data.title}" width="181"
click="changeState(event)"/>
这个组件继承了Canvas。这是个很好的选择,因为Canvas不会对它内部的控件布局强加任何约束。当你创建一个itemRenderer时,考虑一下你想要在元素定位上花费多少努力。举个例子,如果你想要你的renderer中的所有组件在一条线上,用Hbox。因为我们创建的这个组件将会改变大小,所以Canvas是最好的选择。
这里定义了一个单一的交替状态(开始是默认的基础状态),“expandedState”。你可以看到那里有两个元素。SetProperty改变这个组件(Canvas)的高度。第二个元素添加了一个以ac数据成员作为它的数据提供者(dataProvider)的List。
程序代码
<mx:states>
<mx:State name="expandedState">
<mx:SetProperty name="height" value="123"/>
<mx:AddChild position="lastChild">
<mx:List left="10" y="36" right="10" dataProvider="{ac}" height="77"></mx:List>
</mx:AddChild>
</mx:State>
</mx:states>
这个脚本模块定义了ac这个ArrayCollection和一个CheckBox(参考上面)的事件触发器。当这个复选框被选中的时候,currentState(当前状态)就变成了“expandedState”,触发了上面定义的状态中的那些元素,改变了高度并添加了一个List。
程序代码
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var ac:ArrayCollection;
private function changeState(event:flash.events.Event) : void
{
if( event.target.selected )
currentState = "expandedState";
else
currentState = "";
}
// the setting of the data property is overridden to create the
// ArrayCollection from the Array of models listed in the dataProvider
// this this List.
override public function set data(value:Object) : void
{
super.data = value;
ac = new ArrayCollection(value.models);
}
]]>
</mx:Script>
Transition(过渡)定义了state将会怎样变化。Transition是可选的,它给变化加上了效果。首先你可以运行这个例子而不用transition,你就会实实在在地看到这个transition做了什么。transition做的所有工作就是提供更好的视觉体验。
当你不用transition运行这个程序时,点击CheckBox只是使Canvas变大并出现了List。
现在使用transition并运行这个例子。当你点击CheckBox时,List会平滑地打开,并显示其中的元素。再点击CheckBox的时候List又平滑地收了回去。
其中的fromState和toState都设成了通配符:*,这就是说无论从哪个状态变成哪个状态,这个transition都会被应用。这个transition只是一个针对整个组件(Canvas)的Resize效果。有趣的是Flex将会描绘出Resize效果前的大小和效果后的大小,而不用在Resize标签中去定义它。
程序代码
<mx:transitions>
<mx:Transition fromState="*" toState="*">
<mx:Resize target="{this}" />
</mx:Transition>
</mx:transitions>
最后,写上相应的Canvas标签完成这个组件。
程序代码
</mx:Canvas>
简单总结
你可以在任何地方更多地应用状态(States)和过渡(transition),比如在一个itemRenderer里。Transitions让用户体验变得更好并且不需要写太多的代码。状态(States)和过渡(transition)可以变得很复杂。我建议您从一些简单的东西开始,比如这个例子,并渐渐熟悉它们。或许你可以为这个例子添加另外一个state并应用一个不同的tansition。
////////////////////////////////////////////////////
<mx:List x="10" y="10" dataProvider="{array_data}"></mx:List> ...
<mx:List x="429" y="10" dataProvider="{myData}" labelField="label" width="174"></mx:List>
////////////////////////////////////////////////////
分享到:
相关推荐
### 关于ListCtrl的一些总结 #### 一、ListCtrl简介 `ListCtrl`是Windows编程中的一个重要组件,它提供了一种灵活的方式来展示一系列项,并且能够以不同的视图模式显示这些项,比如列表视图(List)、详细视图...
本篇文章将深入探讨“关于list的排序”这一主题,结合提供的标签“源码”和“工具”,我们将从Java的角度出发,通过分析`CompareBooks.java`这个示例文件来理解如何对列表进行排序。 在Java中,`List`接口是`...
本文将深入探讨“关于list比较”的主题,结合源码分析和实用工具,帮助你理解列表比较的基本原理、方法以及在实际应用中的注意事项。 首先,列表比较通常涉及两个方面:内容比较和引用比较。内容比较关注的是列表中...
从提供的文件名来看,"left.htm"可能包含关于遍历List的左侧导航或示例,"iterate_list.shtml.htm"可能是关于如何在实际代码中遍历List的详细教程,而"VC Empire.htm"可能涉及Visual C++环境下处理List容器的技巧或...
在.NET框架中,`List<T>`是一个常用的泛型集合类,它提供了许多便利的方法来操作和查询元素。本文将深入探讨`Exists`和`Contains`这两个方法,它们都是用来检查`List<T>`中是否存在特定元素,但有各自的特点和适用...
Listiterator迭代器的方向遍历,在反向遍历时 源码中 index中的初值需要在定义的时候传入size集合长度 或者通过正向遍历,将nextIndex的值变为集合的长度 然后public boolean hasPrevious() { return nextIndex > 0...
1. `gfxlist.shtml.htm`:这可能是一个HTML文件,包含了关于List Control图形元素或者样式的详细说明,或者是使用List Control展示图形元素的一个示例。 2. `left.htm`:这可能是页面左侧的布局或导航部分,可能包含...
从标签 "list_control test_listcontrol" 我们可以推测,这个项目是关于 ListControl 的功能测试,可能包括自定义列、排序、筛选、分页等功能的验证。 压缩包内的文件名提供了更多线索: 1. **DlgTest.cpp** 和 **...
在"javalist.txt"文件中,可能包含了关于List接口的更多实例、代码示例或者进一步的解释,通过阅读这份文件,你可以深入理解List的用法和背后的原理。记住,实践是检验理论的最好方式,多写代码、多调试,你对List的...
后者可能是关于List的示例代码或者练习项目,通过实际操作,读者可以更好地掌握List的使用技巧。 学习多线程和List,需要理解线程生命周期、线程同步机制如锁(Lock)、 Monitor,以及线程安全的数据结构。对于List...
描述中的“listctrl测试用例”进一步确认了这是一个关于ListCtrl功能验证的项目,可能包含了各种操作和显示场景,用于确保ListCtrl的正确性和稳定性。 标签“listctrl测试”揭示了这个项目的核心关注点在于测试List...
“List View Full Source”标签表明这是一个关于List View控件源代码的详细解析,涵盖了控件的内部机制、事件处理、数据绑定等方面。对于想要深入理解List View工作方式的开发者来说,这是一个宝贵的资源。 【源...
Java中List对象的分页思想-按10个或者n个数对list进行分组 Java中List对象的分页思想是一种常用的数据处理技术,通过将一个大的List对象分割成多个小的List对象,每个小的List对象包含一定数量的元素,例如10个或n...
压缩包中的"LIStinterface"可能包含了如何创建和操作List接口实例的代码示例,也可能包括关于List接口和其实现类性能对比的讨论,以及如何根据特定需求选择合适List类型的方法。通过学习和理解这些内容,开发者可以...
最后,"stingList"可能是一个关于List容器存储和操作字符串的例子。在C++中,字符串是字符序列,可以被当作List中的元素处理。这可能包括创建一个存储字符串的List,使用迭代器遍历并操作这些字符串,或者进行字符串...
在北大青鸟ACCP5.0 S2的课程中,三层架构的学习是核心内容之一,特别是关于List层间数据传递的实践。 表现层是用户与系统交互的部分,通常包括界面和控制逻辑。业务逻辑层则负责处理实际的业务规则和计算,它是应用...
【标签】"listctrl_类"明确了讨论的核心是关于ListCtrl类的扩展和优化。在MFC中,ListCtrl通常继承自CListCtrl类,开发者可以通过继承并重载其成员函数来实现自定义行为。例如,可能需要重载OnDrawItem()函数来控制...
以下是一些关于List接口使用的基本示例: ```java import java.util.ArrayList; import java.util.List; public class ListExample { public static void main(String[] args) { // 创建一个ArrayList实例 List...
这个"ListCtrl.rar"压缩包包含了一份关于ListCtrl操作的源代码实现,可以帮助我们深入理解如何在实际项目中使用和定制ListCtrl。 首先,我们来看`FsListVw.cpp`和`FsListVw.h`这两个文件。它们通常代表了ListCtrl的...
- 这个.sln文件是一个Visual Studio解决方案文件,包含了一个关于List Control扩展的示例项目。打开后,我们可以看到源代码和项目的配置信息,用于学习和参考。 - `.vs` 文件夹包含了Visual Studio的工作区设置。 ...