2016-01-20 43 views
0

我想創建一個自定義Spark列表,基於數據提供者行中的值(稱爲類型)將爲該行設置條件項呈示器。Flex移動Spark列表*條件* ItemRenderer

<s:List> 
    <s:dataProvider> 
     <s:ArrayCollection> 
      <s:source> 
       <fx:Object type="type1" label="type 1 item" /> 
       <fx:Object type="type2" label="type 2 item" /> 
       <fx:Object type="type3" label="type 3 item" /> 
       <fx:Object type="type2" label="type 2 item" /> 
       <fx:Object type="type4" label="type 4 item" /> 
      </s:source> 
     </s:ArrayCollection> 
    </s:dataProvider> 
</s:List> 

所以實質上,每種行類型的項目渲染器都是不同的。

爲什麼我要這樣做?因爲在項目渲染器中爲不同的佈局使用狀態是不可靠的,所以當您快速滾動時,它會被擊中或錯過。

我確實找到了MX列表驗證碼:

public class MultipleRenderersList extends List 
{  
    override public function createItemRenderer(data:Object):IListItemRenderer 
    { 
     if (data.type == 'type1') 
    { 
     return new Type1Component; 
    } 
    else if (data.label == 'type2') 
    { 
     return new Type2Component; 
    } 
    return null; 
} 

但火花名單不公開「createItemRenderer」,甚至任何類似。它確實有

override public function set itemRenderer(value:IFactory):void 

但我沒有辦法訪問dataProvider做問題的條件部分。

任何人都可以幫忙嗎?

+0

只要讓你的itemrenderer自己處理它。 – BotMaster

+0

@BotMaster @BotMaster,我不明白那個評論,我試圖實現的是當DataProvider呈現_type1_的行項目,我想要一個type1項目渲染器(不同的佈局,顏色等),**只是爲那一行* *與_type2_相同等。我不能在自定義渲染器中使用狀態切換,因爲它真的不可靠。除非我錯過了某些明顯的東西,否則請進一步解釋:)感謝 –

+0

如果您的自定義itemrenderer覆蓋數據,那麼您可以讓它決定這些數據以及如何呈現它自己。 – BotMaster

回答

1

好了,找到了,我想:/

http://sourceforge.net/adobe/flexsdk/wiki/Spark%20List/

片段

private function introspectRole(item:Object):IFactory { 
    if (item.role == "employee") { 
     return new ClassFactory(EmployeeRenderer); 
    } else if (item.role == "manager") { 
     return new ClassFactory(ManagerRenderer); 
    } else { 
     return new ClassFactory(DefaultItemRenderer); 
    } 
} 

而且itemRendererFunction設置爲此,看似簡單,但它的作品,所以是的。

謝謝