繁体   English   中英

Flex Mobile防止回收项目渲染器状态

[英]Flex mobile prevent item renderer state from recycled

我有这个自定义列表项渲染器,其中定义了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个项目,默认情况下,每个项目都处于“折叠”状态。 这是来自设置数据功能的跟踪结果:

collapse
collapse
collapse

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

collapse
collapse
expand

现在,当我通过调用此函数“ arraycollection.refresh()”刷新数据提供程序时,结果如下:

expand
collapse
collapse

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

更新数据提供程序后,尝试重新分配项目渲染器。

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

当然,这种解决方案将需要更多的资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM