
Код AS3:
import fl.controls.listClasses.CellRenderer;
import fl.controls.List;
import fl.data.DataProvider;
import fl.events.ListEvent;
import flash.display.Sprite;
import flash.events.Event;
var dp:DataProvider = new DataProvider();
var totalEntries:Number=42;
var i:Number;
for (i=0; i<totalEntries; i++) {
var dt={label:"Math.random(): "+Math.random(),data:null};
if (i==4) {
dt.setColor=true;
}
dp.addItem( dt);
}
var myList:List = new List();
myList.setSize(300,300);
myList.setStyle('cellRenderer', Renderer);
myList.dataProvider=dp;
addChild(myList);
package
{
import fl.controls.LabelButton;
import fl.controls.listClasses.ICellRenderer;
import fl.controls.listClasses.CellRenderer;
import fl.controls.listClasses.ListData;
import flash.display.Shape;
import flash.text.TextField;
public class Renderer extends CellRenderer implements ICellRenderer {
public function Renderer() {
}
override public function set listData(newListData:ListData):void {
super.listData = newListData;
}
override public function get listData():ListData {
return _listData;
}
override public function set data(newData:Object):void {
_data = newData;
if (newData.setColor != undefined) {
//Меняем стиль ячейки
setStyle("upSkin", CellBackgr);
}else {
// здесь задаем стандартный, иначе некоторые ячейки не обновятся.
setStyle("upSkin", CellRenderer_upSkin);
}
}
override public function get data():Object {
return _data;
}
}
}
import flash.display.LineScaleMode;
import flash.display.Shape
class CellBackgr extends Shape {
public function CellBackgr() {
graphics.beginFill(0xFF7700)
graphics.drawRect(0, 0, 100, 15);
graphics.endFill()
}
}
Лучше конечно вместо CellBackgr сделать копию CellRenderer_upSkin и изменить как нужно.
У ListData есть свойство row, можно и к нему привязываться. Но мне кажется удобнее через data. Хотя опять же от задачи зависит.