我正在为游戏创建一个分数列表。现在大多数列表我需要具有相同的ItemRenderer。但是在列出正在播放的用户的列表的一个特定行中,它应该显示不同的信息并具有不同的背景颜色。我怎么能做到这一点?
我已经尝试用状态解决问题,我创建了2个状态,一个状态称为“我的”,第二个状态称为“其他”。
我得到的问题是,当用户点击其中一个列表行,表明我不知道改变了点击或点什么,这就是为什么我认为状态对我来说不是正确的行为。
答案 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,并根据使用状态的行中的数据提供不同的视图 - 在创建时切换到适当的状态。