Reflection no android[resolvido]

Pessoal nao sei se é o caso, mas acho que terei de usar reflection. O problema é que nao sei bem como funciona.

É o seguinte, nos deparamos com uma linha de código legal como esta

this.produto.setCodigo(Integer.parseInt(this.campoCodigo.getEditableText().toString()));

pega o Objeto produto acessa o metodo setCodigo que aceita um int.

Para ter o código que o usuario inseriu na view precisa acessar o campoCodigo com o metodo para pegar um texto com o getEditableText e depois converter para String.

Depois de tudo isso voce ve que o metodo setCodigo aceita um int entao voce faz um parse.

ok…

tem como fazer assim?

this.produto.setCodigo(Integer.parseInt(converteValorCampoParaString(nomeDoCampo)));
converteValorCampoParaString(nomeDoCampo){
//identificar o tipo de objeto que esta vindo da tela, se é TextView ou se é um Rating e assim por diante
//saber quais os metodos que tal tipo de Objeto tem, pois um rating nao deve ter getEditableText para voce receber os valores.
//criar uma variavel com o tipo do campo para receber o valor.
//Retornar uma string 
}

Se isso der certo, só preciso falar que preciso converter para int antes de chamar o metodo que vai retornar a String.

fiz ± assim

	private String converteViewToString(Object campo){
		String resultado="";
		
		campo.getEditableText().toString();
		return resultado;
	}

parei na parte de nao saber oque o campo vai ser… pois ele pode ser um Edit ou um Rating… e agora?

Não sei se entendi bem, mas não é só comparar pra saber o tipo do objeto e depois fazer o cast apropriado?

if (campo is EditText) {
   return ((EditText)campo).getEditableText();
}
if (campo is Rating) {
   return ((Rating)campo).algumMetodo();
}

Ficou assim mas nao vai compilar ele acusa que “is EditText” cannot be resolved or is not a field

private String converteViewToString(Object campo){
		String resultado="";
		if(campo is EditText){
			resultado = ((EditText) campo).getEditableText().toString();
		}
		return resultado;
	}

[quote=denisspitfire]Ficou assim mas nao vai compilar ele acusa que “is EditText” cannot be resolved or is not a field

private String converteViewToString(Object campo){ String resultado=""; if(campo is EditText){ resultado = ((EditText) campo).getEditableText().toString(); } return resultado; } [/quote]

Não é is - me enganei no post anterior, é instanceof.

if (campo instanceof EditText)

estou verificando aqui e depois eu falo se deu certo vlw

acho que “is” se usa no Delphi, hehehe

No Delphi eu não sei… mas eu fiz confusão com ActionScript, apesar de que agora, no AS3, é instanceof também. :smiley:

Em python se usa is também, mas com outro propósito.