【发布时间】:2014-03-13 03:12:48
【问题描述】:
我有这个自定义列表项渲染器,我在其中定义了 2 个自定义状态:
<s:states>
<s:State name="expand"/>
<s:State name="collapse"/>
</s:states>
当我选择一个列表项时,它会变为折叠状态。现在,每当我选择列表中的第一个或最后一个项目并刷新数据提供程序时,这两个项目的当前状态都会交换位置。
请指导我如何保留 itemrenderer 的状态。谢谢。
注意:当我将 usevirtuallayout 更改为 false 时,一切正常。但是,这不是我想要改变的。
[编辑] 以下是我的项目渲染器代码:
<fx:Script>
<![CDATA[
protected function init(event):void
{
currentState = "collapse";
}
override public function set data(value:Object):void
{
trace(currentState.toString());
}
protected function btn_clickHandler(event:MouseEvent):void
{
currentState = "expand";
}
]]>
</fx:Script>
<s:states>
<s:State name="expand"/>
<s:State name="collapse"/>
</s:states>
<s:Button id="changeStateButton" click="btn_clickHandler(event)"/>
上面的例子是一个简单的项目渲染器,其中一个按钮将改变项目渲染器的 currentState。我在数据提供者中有 3 项,默认情况下,每一项都处于“折叠”状态。这是 set data 函数的跟踪结果:
collapse
collapse
collapse
当我点击最后一项的按钮时......这将是跟踪结果:
collapse
collapse
expand
现在,当我通过调用此函数“arraycollection.refresh()”刷新数据提供程序时...结果如下:
expand
collapse
collapse
有人能解释一下这种情况吗?请注意,这只发生在 useVirtualLayout 设置为 true 时...
【问题讨论】:
-
请提供更多上下文。用于通过示例显示列表的代码。
-
嗨@PascalLeMerrer 请参考我在上面添加的新编辑
标签: list apache-flex mobile itemrenderer states