【问题标题】:Flex mobile prevent item renderer state from recycledFlex 移动防止项目渲染器状态被回收
【发布时间】: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


【解决方案1】:

在更新数据提供者后尝试重新分配项目渲染器。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多