如何在Flex中的列表中的最后一项之后添加按钮?

时间:2009-04-11 15:17:16

标签: flex itemrenderer

我在Flex中有一个包含一些数据的Horizo​​ntalList和一个表示Page的ItemRenderer。在列表中的最后一个项目(页面)之后,我想要一个按钮 - 一个Plus来创建一个新页面。

我可以查看哪些数据来获取最后一个ItemRenderer的正确x,y位置?

我的位置
this.listContent.listItems[this.listContent.listItems.length-1];

它给了我正确的ItemRenderer instanceBut,但它的x和y已被用于列表中ItemRenderer的索引位置。我想要相对于列表本身的像素,所以我可以在UpdateDisplayList()中定位一个按钮。

我有兴趣通过UIComponent覆盖而不是通过ItemRenderer本身来做这件事,因为它似乎不应该存在于dataProvider中......它需要是一些奇怪的“lastItem”对象ItemRenderer寻找并且看起来很奇怪。另外,对于一般的列表来说,这是一个非常有用的功能。

那么,关于这个或其他方法的任何想法?

4 个答案:

答案 0 :(得分:0)

很难为最后一个对象获取实际的itemRenderer,因为itemRenderer被重用,所以很难确定哪一个总是最后一个。检查数据中的“lastItem”变量可能是实现此目的的最简单方法。

但是,您可以将outerDocument属性与内联itemRenderer一起使用。这使您可以访问列表。

<mx:List>
    <mx:itemRenderer>
        <mx:Component>
            <ns1:MyRenderer addLastButton="{outerDocument.myList.dataProvider.index == 10}"/>
        </mx:Component>
    </mx:itemRenderer>
...
</mx:List>

答案 1 :(得分:0)

使用itemEditor可能有正确的方法,但我会尝试这样的事情:

  1. 每次刷新数据时,都会向列表中添加一个额外的空对象。
  2. 让一个itemRenderer覆盖显示的here设置数据,它检查对象是否为null,如果是,则将可绑定的布尔值isAddable设置为true。
  3. 此布尔值控制textInput,label和button的可见性和includeInLayout属性。
  4. 让按钮在点击时调度一个事件,通过一些验证将新项目添加到列表中。

答案 2 :(得分:0)

我认为您可以尝试向dataProvider添加一个项目(使用数据,例如“button”),并为列表创建自定义itemRenderer,如果data ==“button,将其外观更改为Button(可以使用状态实现) “

答案 3 :(得分:0)

在列表中 - 添加一个事件creationComplete - 并在其实现中 - 在列表中添加另一个项目,比如使用某个字符串将其推迟到之前的项目。在您的项目渲染器标记中添加此属性:

currentState="{data.sname == '%your string%' ? 'last' : 'normal'}"

然后,当然,添加2个状态:

<s:states><br/>
        <mx:State name="normal"/>
        <mx:State name="last"/>
    </s:states> 

之后,您可以操纵渲染器,根据状态调整文本标签,例如:

<s:Label text.normal="{%whatever%}" text.last="this is the last item"/>

希望它有所帮助!