0

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

我创建了一个 List 组件。

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

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

谢谢

4

3 回答 3

1

覆盖set data您的 CustomItemRenderer 的方法并根据数据分配适当的状态。

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...
}
于 2009-10-16T06:05:53.203 回答
1

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

this.currentState = MOVIE_STATE;

应该

this.currentState = "MOVIE_STATE";

谢谢

DJ

于 2009-10-17T11:20:22.280 回答
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" 这将不起作用,那么它只会影响可见项目。

于 2012-09-05T15:11:25.017 回答