Reflection no android[resolvido]

6 respostas
denisspitfire

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?

6 Respostas

wagnerfrancisco

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();
}
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;
	}
wagnerfrancisco

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; }

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

if (campo instanceof EditText)
denisspitfire

estou verificando aqui e depois eu falo se deu certo vlw

igor_ks

acho que “is” se usa no Delphi, hehehe

wagnerfrancisco

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.

Criado 1 de novembro de 2012
Ultima resposta 1 de nov. de 2012
Respostas 6
Participantes 3