Flex移动设备可防止项目渲染器状态被回收

时间:2014-03-13 03:12:49

标签: list flex mobile itemrenderer states

我有这个自定义列表项呈示器,我在其中定义了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)"/>

上面的示例是一个简单的项呈示器,其中单个按钮将更改itemrenderer的currentState。我在数据提供者中有3个项目,每个项目都在&#34;崩溃&#34;默认状态。这是设置数据函数的跟踪结果:

collapse
collapse
collapse

当我点击最后一项的按钮时......这将是跟踪结果:

collapse
collapse
expand

现在,当我通过调用此函数刷新数据提供程序&#34; arraycollection.refresh()&#34; ...这就是结果:

expand
collapse
collapse

有人可以解释这种情况吗?请注意,这仅在useVirtualLayout设置为true时发生...

1 个答案:

答案 0 :(得分:0)

尝试在更新数据提供者后重新分配项呈示器。

//update data provider
itemList.dataProvider = myCollection;
//update the item renderer
itemList.itemRenderer = new ClassFactory(cutomItemRenderer);

这个解决方案当然会更加耗费资源。

相关问题