我正在为游戏创建一个分数列表。现在大部分列表我需要有相同的 ItemRenderer。但在列表的特定行中列出了正在播放的用户,它应该显示不同的信息和不同的背景颜色。我怎样才能做到这一点?
更新
我已经尝试解决状态问题,我创建了 2 个状态,一个状态称为“我的”,第二个状态称为“其他”。
我遇到的问题是,当用户单击状态更改为我不知道的列表行之一时。单击或其他内容,这就是为什么我认为状态对我来说不是正确的操作。
我正在为游戏创建一个分数列表。现在大部分列表我需要有相同的 ItemRenderer。但在列表的特定行中列出了正在播放的用户,它应该显示不同的信息和不同的背景颜色。我怎样才能做到这一点?
我已经尝试解决状态问题,我创建了 2 个状态,一个状态称为“我的”,第二个状态称为“其他”。
我遇到的问题是,当用户单击状态更改为我不知道的列表行之一时。单击或其他内容,这就是为什么我认为状态对我来说不是正确的操作。
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">
如果dataProvider的对应行中嵌入了不同的数据,可以在override方法中检查数据,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 = "";
}
}
您可以构建一个组件作为 itemrenderer,并让它根据使用状态的行中的数据提供不同的视图 - 在创建时切换到适当的状态。