Como retornar um tipo de um parâmetro?

Estou tentando fazer com que recebendo por parametro uma pessoa consiga fazer uma alteração em um atributo de um componente.

Ex: quero mudar o texto de um TextView.

No construtor a chamada do método é assim:

O método, consegui fazer tudo, e ele está funcionando, mas somente para o “setText”, pois o método recebe a String “setText” passada e compara, com o getDeclaredMethod(), com todos os metodos dentro da classe TextView… o ruim está em que para fazer a comparação eu sou obrigado a passar o tipo do parâmetro que o método irá receber, como eu quero fazer algo dinamico para qualquer metodo existente, como poderia saber qual é o parametro que o metodo da TextView tem q receber?? Pq dai eu o instanciaria e já era.

metodo:

[code]public void atributos(String atributos){
String[] separadas = atributos.split(",");

	int posicao = Integer.parseInt(separadas[0].substring(0, 2));
	String item = separadas[0].substring(2);
	String atributo = separadas[1];
	String alterar = separadas[2];
	Class<CharSequence> aux = CharSequence.class;
	
	if(item.equals("botao")){
		
	} else if(item.equals("label")){
		for (Iterator<TextView> iterator = altv.iterator(); iterator.hasNext();) {  
		    TextView obj = (TextView) iterator.next();
		    if(obj.getId() == posicao){
		    	Method metodos;
				try {
					metodos = TextView.class.getDeclaredMethod(atributo, aux);
					metodos.invoke(obj, alterar);
				} catch (NoSuchMethodException e1) {
					e1.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					e.printStackTrace();
				}
		    }
		}
	} else if(item.equals("checkBox")){
		
	} else if(item.equals("editText")){
		
	}
}[/code]

Vlws

Bom, respondendo à sua pergunta, para saber os tipos dos parâmetros que um método recebe basta chamar o método getParameterTypes() que ele te retorna um array com os tipos de cada um dos parâmetros que o método recebe.

Agora, qual é o problema que você quer resolver exatamente ? Pois ao que me parece, você tem um método que “faz tudo”! Isso vai contra qualquer princípio de programação. Porque você precisa de um método que recebe um nome de componente, busca o método do componente, e chama o método ao invés de simplesmente chamar o método ?

Ou seja, por que é que você quer criar um programa que é intrinsecamente mais lento e mais difícil de debugar que um programa equivalente que não usa reflection e esses truques?
Se você precisa interpretar um script de criação de telas (é isso que você quer fazer? montar uma tela em XML?), crie um programa que gera código Java a partir desse script, em vez de montar a tela em tempo de execução via scripts. Garanto que sua tela vai ficar mais rápida e será mais fácil de debugar o programa.

Eu ia fazer todos os metodos separados como disse o camarada acima, sei q isso foge dos principios da programação, mas estava com problemas no Android pq só funciona uma instancia de criação de um componente na tela, se eu tentar criar a segunda ele sobrepõe a primeira (vi que talvez seja algo do tipo do savedInstanceState uma solução, mas não consegui como implementar dessa forma), tentei fazer de uma forma facil e rápida para a criação, nao pensei na velocidade do comando pq eu necessito de umas 300 telas, onde nao vale a pena criá-las na mão. E esse método dependendo da funcionalidade dele seria usado para outros projetos, a classe inteira seria composto de um metodo de criação da tela, um de ordenação para arrumar os componentes criados no outro metodo e esse que seria o de atribuição de atributos dos componentes.

Um método pequeno q não exige muito da capacidade de nada que consiga fazer qualquer coisa q eu queira. Por mais q ele seja mais lerdo q o normal, ele ainda continua sendo rápido, principalmente pq esse é só o programa teste, eu ainda irei diminuí-lo para deixá-lo mais rápido. Vou incrementar um algoritmo para melhorar a velocidade. Mas antes queria o basicão funcionando.

Eu tentei incrementar o getParameterTypes(), mas eu entro em um problema que não consegui solucionar:

try { metodos = TextView.class.getDeclaredMethod(atributo, x); Class[] x = metodos.getParameterTypes(); metodos.invoke(obj, alterar); } catch (NoSuchMethodException e1) {

Para eu descobrir os parametros pelo getParameterTypes(), eu preciso do metodo antes. Para ter o método eu preciso do tipo dos parametros antes. Como faz? rsrs

Se eu estiver falando alguma besteira desculpe, sou relativamente novo em android.

vlws

A classe TextView tem 5 overloads de setText.
Acho que é muito complicado lidar com eles todos, até porque como você passa os parâmetros todos como uma string separada por vírgulas, é difícil até mesmo escolher o overload certo.
Que tal você escolher um ou dois desses overloads, e chamar diretamente o método?

    atributos("01label,text,algo no label");  

chamaria o overload setText que aceita apenas uma CharSequence. Estou de propósito escrevendo “text” em vez de “setText” para você se lembrar que deve fazer algo como

if ("text".equals (atributo)) { TextView.setText (valor); }
else if (....) { ... }
...

fiz com if/else mesmo… nao consegui implementar da forma que queria… vlws