Flex Mobile Spark List *条件* 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;
}

但是spark列表并不公开'createItemRenderer',甚至任何类似的东西。 它确实有

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

但是我无法访问dataProvider来完成问题的条件部分。

谁能帮忙?


好吧,找到它了,我想:/

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设置为这个,显然很简单,但它的工作原理,所以是的。

谢谢

链接地址: http://www.djcxy.com/p/34669.html

上一篇: Flex Mobile Spark List *conditional* ItemRenderer

下一篇: Simple datagroup with itemrenderer not working in flex mobile