`
harry9888
  • 浏览: 67475 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

关于List

阅读更多
关于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简介 `ListCtrl`是Windows编程中的一个重要组件,它提供了一种灵活的方式来展示一系列项,并且能够以不同的视图模式显示这些项,比如列表视图(List)、详细视图...

    关于list的排序

    本篇文章将深入探讨“关于list的排序”这一主题,结合提供的标签“源码”和“工具”,我们将从Java的角度出发,通过分析`CompareBooks.java`这个示例文件来理解如何对列表进行排序。 在Java中,`List`接口是`...

    关于list比较

    本文将深入探讨“关于list比较”的主题,结合源码分析和实用工具,帮助你理解列表比较的基本原理、方法以及在实际应用中的注意事项。 首先,列表比较通常涉及两个方面:内容比较和引用比较。内容比较关注的是列表中...

    Iterating through List Containers关于List容器的话题(5KB)

    从提供的文件名来看,"left.htm"可能包含关于遍历List的左侧导航或示例,"iterate_list.shtml.htm"可能是关于如何在实际代码中遍历List的详细教程,而"VC Empire.htm"可能涉及Visual C++环境下处理List容器的技巧或...

    转 关于List<T>中的Exists 和Contains的区别

    在.NET框架中,`List&lt;T&gt;`是一个常用的泛型集合类,它提供了许多便利的方法来操作和查询元素。本文将深入探讨`Exists`和`Contains`这两个方法,它们都是用来检查`List&lt;T&gt;`中是否存在特定元素,但有各自的特点和适用...

    关于List集合特有的迭代器的反向遍历

    Listiterator迭代器的方向遍历,在反向遍历时 源码中 index中的初值需要在定义的时候传入size集合长度 或者通过正向遍历,将nextIndex的值变为集合的长度 然后public boolean hasPrevious() { return nextIndex &gt; 0...

    06_abcd.zip_list_list 控件_list control控件_list控件_增强control list

    1. `gfxlist.shtml.htm`:这可能是一个HTML文件,包含了关于List Control图形元素或者样式的详细说明,或者是使用List Control展示图形元素的一个示例。 2. `left.htm`:这可能是页面左侧的布局或导航部分,可能包含...

    test_list_control.rar_list control_test_ListControl

    从标签 "list_control test_listcontrol" 我们可以推测,这个项目是关于 ListControl 的功能测试,可能包括自定义列、排序、筛选、分页等功能的验证。 压缩包内的文件名提供了更多线索: 1. **DlgTest.cpp** 和 **...

    javalist.zip_list集合 java

    在"javalist.txt"文件中,可能包含了关于List接口的更多实例、代码示例或者进一步的解释,通过阅读这份文件,你可以深入理解List的用法和背后的原理。记住,实践是检验理论的最好方式,多写代码、多调试,你对List的...

    多线程及list使用.zip

    后者可能是关于List的示例代码或者练习项目,通过实际操作,读者可以更好地掌握List的使用技巧。 学习多线程和List,需要理解线程生命周期、线程同步机制如锁(Lock)、 Monitor,以及线程安全的数据结构。对于List...

    listctrl测试用例

    描述中的“listctrl测试用例”进一步确认了这是一个关于ListCtrl功能验证的项目,可能包含了各种操作和显示场景,用于确保ListCtrl的正确性和稳定性。 标签“listctrl测试”揭示了这个项目的核心关注点在于测试List...

    List View Full Source

    “List View Full Source”标签表明这是一个关于List View控件源代码的详细解析,涵盖了控件的内部机制、事件处理、数据绑定等方面。对于想要深入理解List View工作方式的开发者来说,这是一个宝贵的资源。 【源...

    关于Java中List对象的分页思想-按10个或者n个数对list进行分组

    Java中List对象的分页思想-按10个或者n个数对list进行分组 Java中List对象的分页思想是一种常用的数据处理技术,通过将一个大的List对象分割成多个小的List对象,每个小的List对象包含一定数量的元素,例如10个或n...

    LIStinterface.zip

    压缩包中的"LIStinterface"可能包含了如何创建和操作List接口实例的代码示例,也可能包括关于List接口和其实现类性能对比的讨论,以及如何根据特定需求选择合适List类型的方法。通过学习和理解这些内容,开发者可以...

    STL.rar_STL list pdf

    最后,"stingList"可能是一个关于List容器存储和操作字符串的例子。在C++中,字符串是字符序列,可以被当作List中的元素处理。这可能包括创建一个存储字符串的List,使用迭代器遍历并操作这些字符串,或者进行字符串...

    北大青鸟ACCP5.0 S2 三层架构 List层间数据传递代码实例

    在北大青鸟ACCP5.0 S2的课程中,三层架构的学习是核心内容之一,特别是关于List层间数据传递的实践。 表现层是用户与系统交互的部分,通常包括界面和控制逻辑。业务逻辑层则负责处理实际的业务规则和计算,它是应用...

    YUESEFU.zip_listctrl 类

    【标签】"listctrl_类"明确了讨论的核心是关于ListCtrl类的扩展和优化。在MFC中,ListCtrl通常继承自CListCtrl类,开发者可以通过继承并重载其成员函数来实现自定义行为。例如,可能需要重载OnDrawItem()函数来控制...

    java中List的用法和实例详解

    以下是一些关于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.rar"压缩包包含了一份关于ListCtrl操作的源代码实现,可以帮助我们深入理解如何在实际项目中使用和定制ListCtrl。 首先,我们来看`FsListVw.cpp`和`FsListVw.h`这两个文件。它们通常代表了ListCtrl的...

    C++MFC List Control 扩展

    - 这个.sln文件是一个Visual Studio解决方案文件,包含了一个关于List Control扩展的示例项目。打开后,我们可以看到源代码和项目的配置信息,用于学习和参考。 - `.vs` 文件夹包含了Visual Studio的工作区设置。 ...

Global site tag (gtag.js) - Google Analytics