Flex 4.6移动水平列表:重新加载itemRenderer

时间:2012-07-11 08:00:59

标签: android actionscript-3 flex mobile flex4

我有一个列表,其布局设置为水平显示。

<s:List id="pagedList"
        width="100%" height="100%"
        verticalScrollPolicy="off" horizontalScrollPolicy="on"
        pageScrollingEnabled="true"
        itemRenderer="views.component.renderer.pageListItemRenderer"
        skinClass="views.component.skin.PagedListSkin"
        dataProvider="{acPages}"
        scrollSnappingMode="center"
        interactionMode="touch"
        useVirtualLayout="true">
            <s:layout>
                <s:TileLayout orientation="rows" requestedRowCount="1"
                              columnWidth="{pagedList.width}" rowHeight="{pagedList.height}" 
                              verticalGap="0" horizontalGap="0" />
                </s:layout>
</s:List>

列表的dataProvider是

[Bindable]
private var acPages:ArrayCollection = 
    new ArrayCollection( [
        {status:"Approved", method:"findRange(0,10)"},
        {status:"Pending", method:"findRange(10,20)"},
        {status:"Draft", method:"findRange(20,30)"},
        {status:"Ready", method:"findRange(30,40)"},
        {status:"Cancelled", method:"findRange(40,50)"},
        {status:"Recommended", method:"findRange(50,60)"},
        {status:"Resubmitted", method:"findRange(60,70)"}
]);

最后是itemRenderer

<fx:Script>
        <![CDATA[
override public function set data(value:Object):void 
            {
                super.data = value;

                if (value== null)
                    return;

                if (data.status)
                    mss.loadDgrid(data.method);
            }
    ]]>
    </fx:Script>

<s:Group width="100%" height="100%">
        <s:layout>
            <s:VerticalLayout gap="0" verticalAlign="middle" horizontalAlign="center" paddingBottom="30"/>
        </s:layout>
        <s:Group width="100%" contentBackgroundColor="0x000001">
            <s:layout>
                <s:HorizontalLayout horizontalAlign="center" verticalAlign="middle"/>
            </s:layout>
            <s:Label fontWeight="bold" text="&lt;" paddingLeft="20"/>
            <s:Spacer width="100%"/>
            <s:Label fontWeight="bold" text="{data.status}"/>
            <s:Spacer width="100%"/>
            <s:Label fontWeight="bold" text="&gt;" paddingRight="20"/>
        </s:Group>

        <s:DataGrid id="dgTaskGrid"
                    width="100%" height="100%"
                    verticalScrollPolicy="on"
                    dataProvider="{mss.dataProvider}">
            <s:columns>
                <s:ArrayList>
                    <s:GridColumn headerText="Application ID" dataField="phId" />
                    <s:GridColumn headerText="Status" dataField="phAppStatus" />
                </s:ArrayList>
            </s:columns>
        </s:DataGrid>
    </s:Group>

您可以看到列表将显示基于acPages ArrayCollection的7个页面,用户可以在列表中左右滑动以转到下一个/上一个页面。每个页面都将具有DataGrid,并应加载各自的内容。例如,“已批准”页面将使用data.method上分配的acPages显示自己的数据。然后,mss.loadDgrid会向网络服务发送HTTPRequest并返回结果。

目前,正在发生的事情,列表将首先正确显示已批准的数据,一旦我向左滑动以显示下一页(待定页面),该页面将使用所需数据很好地呈现。但是,当我滑回上一页(已批准页面)时,DataGrid将显示待处理页面中的数据。我当时认为它应该重新加载但事实并非如此。这适用于其余页面。

我尝试将useVirtualLayout设置为falsetrue,但似乎没有成功。我还有set Data函数以及dataChange()的{​​{1}},但它仍然无法重新加载。

我现在想要的是每次滑动,itemRenderer将刷新并获得所需的数据。

我是Flex的新手,所以我使用的方法可能是错误的。期待您的帮助。

谢谢, 杰森

1 个答案:

答案 0 :(得分:0)

这是itemrenderer刷新问题。您可以查看以下内容:

Invalidating a Spark List Component to Redraw All Item Renderers

将所有数据放入acPages arraycollection的原因是什么?也许,您可以创建7个arraycollection来保存数据,然后在必要时将其分配给acPages。