You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flex.apache.org by "victor yew (JIRA)" <ji...@apache.org> on 2014/04/01 05:56:14 UTC

[jira] [Updated] (FLEX-34196) Flex mobile prevent item renderer state from recycled

     [ https://issues.apache.org/jira/browse/FLEX-34196?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

victor yew updated FLEX-34196:
------------------------------

    Attachment: ItemRendererTest.fxp

Please import this project into Flash Builder and run with debugger. There is a list and a button when launch. Please click the "Change" button to change the itemrenderer state. Then, click the "refresh" button to refresh the data provider. You will then notice the first item and the third item swap with each other. 

> Flex mobile prevent item renderer state from recycled
> -----------------------------------------------------
>
>                 Key: FLEX-34196
>                 URL: https://issues.apache.org/jira/browse/FLEX-34196
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: Spark: DataGroup
>    Affects Versions: Apache Flex 4.11.0
>         Environment: Window 7 64bit, Flash Builder 4.6
>            Reporter: victor yew
>              Labels: arraycollection, datagroup, itemrenderer, usevirtuallayout
>         Attachments: ItemRendererTest.fxp
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> I have this custom list item renderer where I have defined 2 custom states:
> <s:states>
>     <s:State name="expand"/>
>     <s:State name="collapse"/>
> </s:states>
> When I select one of the list item, it will change to state collapse. Now whenever I select the first or the last item in the list and I refresh the data provider, the current state of both the items will swap places.
> Please guide me on how to retain the state of the itemrenderer. Thank you.
> Note: It all works well when I change the usevirtuallayout to false. But, it is not what I intended to change.
> [Edit] The following is my code for the item renderer:
> <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)"/>
> The example above is a simple item renderer where a single button will change the currentState of the itemrenderer. I have 3 items in the data provider and each one of them is in the "collapse" state by default. This is the trace result from the set data function:
> collapse
> collapse
> collapse
> When I click the button at the last item... this will be the trace result:
> collapse
> collapse
> expand
> Now, when I refresh the data provider by calling this function "arraycollection.refresh()"...this is the result:
> expand
> collapse
> collapse
> Can somebody explain this scenario? Notice that this only happens when the useVirtualLayout is set to true...



--
This message was sent by Atlassian JIRA
(v6.2#6252)