2010-12-11 9 views
4

J'essaie de passer d'une activité à une autre en fonction d'une entrée de l'utilisateur.convertir une chaîne en classe

Je suis en train d'utiliser:

String myClass = "some_user_input.class" 
Intent myIntent = new Intent(getApplicationContext(), myClass); 
startActivity(myIntent); 

... pour passer d'une activité à l'autre.

Je peux faire cela ok où je référence ma nouvelle activité directement dans le code dur et ne pas essayer de le compiler à partir du texte, (par exemple classA.class), mais je veux être en mesure de construire mon intention en passant C'est une chaîne compilée par l'utilisateur. Par exemple si l'utilisateur entre B dans un edittext, je veux aller à classB.class Si l'utilisateur entre Z, je veux aller à classZ.class.

Y at-il un moyen de compiler la classe que je veux utiliser en utilisant des chaînes que je convertis ensuite en classe?

Merci d'avance!

+0

Essayez [Classloader.loadClass] (http: // d. android.com/reference/java/lang/ClassLoader.html) – mibollma

+0

avez-vous plusieurs paquets – Trikaldarshi

Répondre

5

Le mécanisme de réflexion vous permet de le faire:

String myClass = "some_user_input"; 
Class<?> clazz = Class.forName(myClass); 
Intent myIntent = new Intent(getApplicationContext(), clazz); 

Notez que ces classes devraient être inclus dans le manifeste XML Android.

Notez également que je ne gère pas l'exception dans cet exemple :)

+1

J'ai essayé votre code. Son lancement classnotfoundexception. Une idée pourquoi? – Varundroid

+0

Il lève une exception car vous devez ajouter le package complet à la chaîne comme 'us.foobar.package.some_user_input' – Rico

0

Ceci est ma solution en utilisant la méthode Class.forName():

String myClass = "foo.class"; 
Intent i = new Intent(getApplicationContext(), Class.forName(myClass)); 
startActivity(i); 
Questions connexes