Flex / AS3多状态itemrenderers问题

时间:2009-10-15 19:18:20

标签: flex actionscript-3 itemrenderer

我创建了一个具有3个状态的模块作为itemrenderer。这些州被称为电影,歌曲和TvShows。基本状态为空。 itemRenderer由Hbox,Vbox和标签组成。

我创建了一个List组件。

我想要做的是填充List组件中的数据,并使用我的ItemRenderer使其可见。根据从数据库中提取的数据,我想显示itemRenderer的正确状态。因此,如果从数据库中取出的记录是一首歌曲,我想显示歌曲状态,如果是电影,我想显示电影状态等等。

因此,根据拔出的数据,我想更改itemrenderer的当前状态。我该怎么做? 谁能告诉我一个如何制作这段代码的例子?

由于

3 个答案:

答案 0 :(得分:1)

覆盖CustomItemRenderer的set data方法,并根据数据指定适当的状态。

override public function set data(value:Object):void
{
  super.data = value;
  if(data.type == "song")
    this.currentState = SONG_STATE;
  else if(data.type == "movie")
    this.currentState = MOVIE_STATE;
  else if //and so on...
}

答案 1 :(得分:1)

谢谢它运作良好。 我唯一注意到的是:

this.currentState = MOVIE_STATE;

应该是

this.currentState = "MOVIE_STATE";

感谢

DJ

答案 2 :(得分:0)

使用上述选项,您需要通过循环数据数组收集并将类型设置为另一个州名来调整所有数据。

或许更好的解决方案是循环遍历列表中的所有项目并更改状态;

private function changeItemrendererState():void
    {
        var item:mycustomitemrenderer;

        for(var i:uint = 0; i < itemlist.numElements; i++)
        {
            item = itemlist.getElementAt(i) as mycustomitemrenderer;

            item.currentState = "mynewstate";
        }
    }
<s:Scroller focusEnabled="false" hasFocusableChildren="true">   
        <s:DataGroup dataProvider="{mydata}"  itemRenderer="skins.mycustomitemrenderer"  width="100%" height="100%" id="itemlist">
            <s:layout>
                <s:TileLayout horizontalGap="2" verticalGap="2" columnAlign="justifyUsingWidth"/>
            </s:layout>
        </s:DataGroup>
</s:Scroller>

如果你使用useVirtualLayout =“true”,这将不起作用,它只会影响可见项目。