【问题标题】:Air Mobile App List ItemRenderer scolling issueAir Mobile App List Item Renderer 滚动问题
【发布时间】:2013-07-10 15:58:06
【问题描述】:

有一个奇怪的问题。

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

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

开始滚动 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>

【问题讨论】:

    标签: list mobile air flash-builder itemrenderer


    【解决方案1】:

    当 List.useVirtualLayout == true (这是默认设置)时,ItemRenderers 会被重用以提高性能。 为了使其可重复使用,请确保所有标签等都重置为其默认值,无论何时其数据发生更改。 为了实现这一点,覆盖

    set data(value:Object):void 
    

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多