Flex列表:与第一个项目不同的出现

Flex列表:与第一个项目不同的出现

问题描述:

我正在创建一个显示Flex新闻列表的移动应用程序。Flex列表:与第一个项目不同的出现

每个新闻都有一个标题和一张图片,所以我使用带有iconItemRenderer的列表来显示结果。看来itemRenderers总是给所有项目出现相同的出现。

但我想给出第一个项目不同的外观,全幅照片和更大的标题。我不知道该怎么做。

有什么想法?

+1

如何创建自定义渲染器? – 2012-07-18 07:54:09

+0

你的意思是在actionscript中定制一个itemRenderer类?我在尝试:我按照这个教程[链接](http://www.youtube.com/watch?v=EOpsDZaQrOI),但我没有看到你可以'抓住'第一个项目 – user1076149 2012-07-18 08:19:52

+2

你应该能够使用itemRendererFunction为第一个项目使用不同于其他渲染器的渲染器。 – JeffryHouser 2012-07-18 13:01:12

您应该使用自定义组件并重写一些基本方法。所以,我试图做到这一点,但面临一些问题。可能是这个问题没有在flex 3中修复(我使用flex 3 :-))。 因此,尽管这我找到了解决办法。

import mx.controls.List; 
import mx.core.IFactory; 

public class ListEx extends List{ 

    public function ListEx(){ 
     super(); 
    } 

    public var item1stRenderer:IFactory; 
    public var item1stCount:int=1; 
    private static var _first:int = 0; 

    override public function getItemRendererFactory(data:Object):IFactory{ 
     if(_first<=item1stCount && item1stRenderer != null && data != null){ 
      return item1stRenderer; 
     }else{ 
      return super.getItemRendererFactory(data); 
     } 
    } 

    override public function get itemRenderer():IFactory{ 
     if(_first<=item1stCount && item1stRenderer != null){ 
      _first++; 
      return item1stRenderer; 
     }else{ 
      return super.itemRenderer; 
     }   
    }  
} 

让我们来测试一下!

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" height="100%" width="100%" xmlns:local="*"> 

    <mx:Model id="mystates"> 
     <states> 
      <state label="Alabama" data="AL"/> 
      <state label="Alaska" data="AK"/> 
      <state label="Arizona" data="AZ"/> 
      <state label="Arkansas" data="AR"/> 
      <state label="California" data="CA"/> 
      <state label="Colorado" data="CO"/> 
      <state label="Connecticut" data="CT"/> 
     </states> 
    </mx:Model> 

    <local:ListEx itemRenderer="mx.controls.TextInput" id="g_list" dataProvider="{mystates.state}" width="100%"> 
     <local:item1stRenderer> 
      <mx:Component> 
       <mx:Label color="blue"/> 
      </mx:Component> 
     </local:item1stRenderer> 
    </local:ListEx> 

</mx:Application> 

希望,我可以帮助你。

PS:抱歉我的英语,我是俄语演讲:)

+0

正如你所看到的,两种方法必须被覆盖,可能有bug – MaxXx1313 2012-07-23 12:33:34

+0

还有一个!您可以为前N个元素设置另一个项目渲染器,而不仅仅是一个 – MaxXx1313 2012-07-23 12:35:31