ListView com itens customizados

Bom dia…

Pessoas,

tenho que criar uma lista onde seus items precisam ter cores diferentes dependendo do status do item.

Ex:
Status 1 -> Cor de fundo: preto | Cor do texto: branco
Status 2 -> Cor de fundo: azul | Cor do texto: Verde

Implementei meu Adapter e faço isso no método getView(). Até agora tudo certo.

O problema é que perco aquela cor padrão do android quando um item da lista é selecionado. Com isso, ficou definido que quando o item estiver selecionado (state_focus, state_pressed), tenho que alternar as cores dos itens.

Ex:
Status 1 selecionado -> Cor de fundo: branco | Cor do texto: preto
Status 2 selecionado -> Cor de fundo: Verde | Cor do texto: Azul

A solução que encotrei para aplicar essas cores nos items, foi usar as classes StateListDrawable para o background do do Item e o método
setTextColor para o TextView.

Criei o seguinte metódo:

private void adicionaRegraDeColoracao(View view, int corFrente, int CorFundo){
		int[][] estadosTexto;
		int[] coresTexto;
		TextView textView;
		StateListDrawable estados;
		
		textView = (TextView) view.findViewById(R.id.textview_name);

		
		estados = new StateListDrawable();
		estados.addState(new int[] {android.R.attr.state_focused}, new ColorDrawable(corFrente));
		estados.addState(new int[] {android.R.attr.state_pressed }, new ColorDrawable(corFrente));
		estados.addState(new int[] {android.R.attr.state_enabled }, new ColorDrawable(corFundo));
	    
	    estadosTexto = new int[][] {new int[]{android.R.attr.state_pressed}, 	new int[]{android.R.attr.state_focused}, 	new int[0]};
	    coresTexto = new int[] {	     corFundo, 						        corFundo, 						        corFrente};

	    //view.setFocusable(true);
	    

	    view.setBackgroundDrawable(estados);
	    textView.setTextColor(new ColorStateList(estadosTexto, coresTexto));
	}

O que este método faz é criar duas listas de estados, uma para o objeto view(que é um linearLayout) e uma para o textView.

Testei este método num projeto teste e funcionou perfeitamente.

Mas, para itens do listView, me parece que os itens não estão pegando o status de focus ou clique. O Texto e a cor de fundo são sempre o padrão.

Fiz um teste e adicionei um OnItemSelectedListener para o listView:

			@Override
			public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
				view.requestFocus();
		        }

e também não alterou as cores da lista.

Caso voce tenha alguma ideia do que fazer ou do que pode estar errado, poste plz… qlqr opinião já ajuda.

Obs:
Criar XMLs com selectors, como este abaixo, resolveria meu problema, caso minhas cores não fossem criadas de uma tabela cores do banco de dados da aplicação.

...

Obrigado

Opa, consegui. O problema estava nos estados do item da lista quando ele está selecionado.

estados = new StateListDrawable();
estados.addState(new int[] {android.R.attr.state_window_focused, android.R.attr.state_enabled, android.R.attr.state_selected}, corFrente);
estados.addState(new int[0], corFundo);

estadosTexto = new int[][] {
				new int[] { android.R.attr.state_window_focused, android.R.attr.state_enabled, android.R.attr.state_selected}, 	
				new int[0]};

		coresTexto = new int[] {
				corFundo,
				corFrente};