flex 4 list ItemRenderer:我如何为不同的行设置不同的itemrenrerer?

时间:2010-06-28 11:54:32

标签: flex list flex4 itemrenderer

我正在为游戏创建一个分数列表。现在大多数列表我需要具有相同的ItemRenderer。但是在列出正在播放的用户的列表的一个特定行中,它应该显示不同的信息并具有不同的背景颜色。我怎么能做到这一点?

更新

我已经尝试用状态解决问题,我创建了2个状态,一个状态称为“我的”,第二个状态称为“其他”。

我得到的问题是,当用户点击其中一个列表行,表明我不知道改变了点击或点什么,这就是为什么我认为状态对我来说不是正确的行为。

3 个答案:

答案 0 :(得分:9)

Flex 4附带的spark List控件允许您根据某些逻辑分配不同的itemRenderer。

您可以通过设置 itemRendererFunction 属性来创建自定义项呈示器功能。

    <fx:Script>
    <![CDATA[
        import renderers.*;

        import mx.core.ClassFactory;
        import spark.skins.default.DefaultItemRenderer;

        private function list_itemRendererFunc(item:Object):ClassFactory {
            var cla:Class = DefaultItemRenderer;
            switch (item.type) {
                case "employee":
                    cla = EmployeeItemRenderer;
                    break;
                case "manager":
                    cla = ManagerItemRenderer;
                    break;
                default:
                    break;
            }
            return new ClassFactory(cla);
        }
    ]]>
</fx:Script>

<s:List id="list"
        labelField="name"
        itemRendererFunction="list_itemRendererFunc"
        horizontalCenter="0"
        verticalCenter="0">

答案 1 :(得分:0)

如果不同的数据嵌入在dataProvider的相应行中,您可以检查覆盖public set data方法中的数据并相应地设置itemRenderer的背景颜色。如果在该特定行中需要更多控件,则可以使用状态。只需设置this.currentState = "currentUser";

即可
override public function set data(item:Object):void
{
  if(item.user == SomeGlobal.currentUser)//or outerDocument.currentUser
  {
    this.currentState = "currentUser";
  }
  else
  {
    //reset to default state, coz item renderers are reused
    this.currentState = "";
  } 
}

如果您不熟悉各州,那么在states

中使用Flex的例子很多

答案 2 :(得分:0)

您可以构建一个组件作为itemrenderer,并根据使用状态的行中的数据提供不同的视图 - 在创建时切换到适当的状态。