[RESOLVIDO] Flex - Mudar cor do label num item de itemRenderer

Olás

Estou penando pra descobrir como mudar a cor do label de um ítem de um List (com seus itemRenderers) em tempo de execução.

Pra simplificar, quero por ex mudar a cor de um label num ítem da lista ao clicar num botão na aplicação (não renderizado, fora da lista).

Intuitivamente tentei sem sucesso (mas ajuda a pegar a idéia) o seguinte:

Achei muita coisa sobre mudar o itemRenderer da lista, mas não quero mudar tudo, somente um específico de um evento vindo de fora.

Obrigado!

Acho que vc vai ter que escrever seu próprio renderer para fazer isso. Além disso, tem uma propriedade, autodrawbackground que vc tem que setar para false para controlar seu item.

[]s

Sobre escrever o próprio renderer, acho q vc está falando em fazer outro renderer estilizado e depois trocar por ele, certo?
Se for isso eu já fiz, usando “ClassFactory”, mas deu errado pois na hora que ele faz o update do renderer, mais de um item é afetado (depende do tamnho da lista acho, mas uns 2 ou 3 ítens foram afetados pelo estilo).
Valeu!

Os items renderes são reutilizados pelo data grid. Quando vc mexe no scrool, ele pega um item que não vai mais aparecer e reutiliza. Isso já ocorreu comigo, quando meu item renderer era um checkBox. Eu selecionava um e alguns outros eram tb selecionados. No seu renderer seria bom vc setar a cor toda vez que o seu data muda. Sobrescreva o método set data de seu componente e execute a lógica dentro. Se vc colocar o código fica mais fácil de ajudar.

[]s

Então renzonuccitelli, eu já fiz algo parecido (não é em dataGrid, é num List) mas não rolou, vou colocar pra vc conferir:

primeiro criei minha lista com o atributo status (usado na condição de mudar a cor do label)

	public class minhaLista extends List{

		private var _status:String;

		public function minhaLista(){super();}
		
		public function get status():String {return _status;}
		public function set status(value:String):void {_status = value;}
		
	}	
depois, no meu itemRenderer, coloquei o override pra ler o status e mudar a cor do label
 override public function set data(value:Object):void {
				super.data = value;
				if (data.status == "APROVADO") 
					lblItem.setStyle("color",0x39DF17); // cor verde
		}

e, finalmente, na aplicação, o valor do status com um Bind pra uma variável ‘global’ (rootStatus), que pode ser alterada por qualquer evento (clique de qq botão por ex)

 <myComp:minhaLista id="thumbList" itemRenderer=meultemRenderer"   status="{rootStatus}" >								

nenhum erro é acusado na aplicação mas nada disso funcionou, o meuItemRenderer não entra estilizado e nem altera :frowning:

Alguma sugestão?
Valeu!

Como eu disse, o ItemRenderer é reutilizado. O que vc está fazendo é setar o background quando aprovado. Está faltando voltar a cor original quando o status for diferente de aprovado. Experimenta colocar um else na sobreposição do set data e voltar a cor original.

[]s

Pode crer, agora entendi o processo, vc matou, foi só mesmo colocar o “else” pra ele aplicar (resetar) o que não estiver com status.
Testei inclusive com o ClassFactory e rolou (no fundo deve ser a mesma coisa, ou estou enganado?).

Brigadão :smiley:
abs

No fim das contas mesmo quando vc coloca a String o flex por traz dos panos passa a classe como argumento do ClassFactory. O que eu faço é implementar sempre a interface IFactory em meus itemRenderes para não ter que usar o ClassFactory. Mas entre String e ClassFactory, prefiro o segundo, pois se vc refatorar o nome da classe não vai ter problemas, como vai ter no primeiro caso.

E precisando de um curso, de uma olhada em www.nuccitec.com.br.

[]s

blz, valeu!