0

有一个奇怪的问题。

如果我返回更多的数据行,那么当我开始滚动列表时可以在屏幕上显示的内容 来自记录 1 的数据将被复制到滚动条上的下一个显示项

示例 10 个数据记录 1 2 3 4 显示

start scrolll 5 正在显示 1 个数据 6 可能显示 1 或 2 个数据,依此类推

列表中显示了 10 条记录,但信息不正确。

这是代码

        protected function display_gas_pricesResult_resultHandler(event:ResultEvent):void
        {
        currentState='start_here';
        this.list.dataProvider=null;
        this.list.dataGroup.invalidateDisplayList();
        label_waterway.text=this.BoaterObject.waterway;
        var _itemRenderer:IFactory=this.list.itemRenderer;
        this.list.itemRenderer=null;
        this.list.itemRenderer=_itemRenderer;
        this.list.dataProvider=TypeUtility.convertToCollection(display_gas_pricesR esult.lastResult);
        this.list.validateDisplayList();
        }



<s:List id="list"
    width="100%"
    height="100%"
    change="list_changeHandler(event)"
    contentBackgroundAlpha="0"
    pageScrollingEnabled="true"
    borderVisible="true"
    scrollSnappingMode="leadingEdge"
    itemRenderer="renderers.ir_gas_prices">
 <s:layout>
    <s:VerticalLayout/>
 </s:layout>
</s:List>

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        width="100%" color="#000000"
        creationComplete="itemrenderer1_creationCompleteHandler(event)"
        autoDrawBackground="false" contentBackgroundAlpha="0">
        <s:layout>
        <s:HorizontalLayout gap="1"
        paddingBottom="5"
        paddingLeft="5"
        paddingRight="5"
        paddingTop="5"
        verticalAlign="middle"/>
        </s:layout>
        <fx:Script>
        <![CDATA[
        import mx.events.FlexEvent;

        protected function itemrenderer1_creationCompleteHandler(event:FlexEvent):void
        {
        if (data.gas_price_id == '0')
        {
        currentState='no_prices';

        }
        else
        {
        currentState='show_price';
        label_name.text=data.name;
        label_status.text=data.status;
        label_gas.text=data.gas_price;
        label_diesel.text=data.diesel_price;
        label_date.text=data.date;
        label_boatname.text=data.boat_name;
        }
        }
        ]]>
        </fx:Script>
        <s:states>
        <s:State name="show_price"/>
        <s:State name="no_prices"/>
        </s:states>
        <s:BorderContainer width.show_price="100%" height.show_price="100%" cornerRadius.show_price="10"
           dropShadowVisible.show_price="true">
        <s:layout.show_price>
        <s:HorizontalLayout paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5"/>
        </s:layout.show_price>
        <s:VGroup width="15%"
          horizontalAlign="center">
        <s:Image width="56"
         height="46"
         source="@Embed('assets/basic1-088.png')"/>
        <s:Label id="label_status" includeIn="show_price" width="100%" color="#662100" fontSize="18"
         text="Label" textAlign="center"/>
        </s:VGroup>
        <s:VGroup width="100%"
          gap="1">
        <s:HGroup width="100%">
        <s:Label id="label_name" includeIn="show_price" width="100%" color="#662100"
         fontSize="20" fontWeight="bold" text="Label"/>
        <s:Label includeIn="no_prices"
         fontSize="16"
         text="Sorry no one has posted any fuel prices yet.&#xd;Be the first to post fuel prices on this water way.&#xd;Click the add button "/>
        </s:HGroup>
        <s:HGroup includeIn="show_price"
          width="100%"
          horizontalAlign="left"
          paddingLeft="20">
        <s:VGroup gap="1"
          horizontalAlign="center"
          verticalAlign="top">
        <s:Label fontSize="18"
         fontWeight="bold"
         text="Gas"/>
        <s:HGroup width="100%">
        <s:Label fontFamily="_typewriter"
         fontSize="24"
         fontWeight="bold"
         text="$"/>
        <s:Label id="label_gas"
         color="#FF0303"
         fontFamily="_typewriter"
         fontSize="24"
         fontWeight="bold"
         text="Label"/>
        </s:HGroup>
        </s:VGroup>


        <s:VGroup gap="1"
          horizontalAlign="center"
          verticalAlign="top">
        <s:Label fontSize="18"
         fontWeight="bold"
         text="Diesel"/>
        <s:HGroup width="100%">
        <s:Label fontFamily="_typewriter"
         fontSize="24"
         fontWeight="bold"
         text="$"/>
        <s:Label id="label_diesel"
         color="#00CA26"
         fontFamily="_typewriter"
         fontSize="24"
         fontWeight="bold"
         text="Label"/>
        </s:HGroup>
        </s:VGroup>
        <s:Spacer width="20%"
          height="10"/>
        <s:VGroup width="50%"
          gap="1"
          horizontalAlign="right">
        <s:Label id="label_date"
         width="100%"
         fontSize="16"
         text="Label"
         textAlign="right"/>
        <s:HGroup width="100%"
          horizontalAlign="right">
        <s:Label fontSize="16"
         fontWeight="bold"
         text="By:"/>
        <s:Label id="label_boatname"
         fontSize="16"
         text="Label"/>
        </s:HGroup>
        </s:VGroup>
        </s:HGroup>
        </s:VGroup>
        </s:BorderContainer>
        </s:ItemRenderer>
4

1 回答 1

0

当 List.useVirtualLayout == true (这是默认设置)时,出于性能考虑重用 ItemRenderers。为了使其可重用,请确保所有标签等都重置为其默认值,无论何时其数据更改。为了实现这一点,重写

set data(value:Object):void 

函数,每当新数据设置到渲染器时都会调用该函数。

AFAIK,“creationComplete”事件只会在创建渲染器时触发一次,这意味着您的显示将不会正确更新。

于 2013-07-16T10:18:28.500 回答