2010-12-11 71 views
4

我正试图根据某些用户输入在一个活动与另一个活动之间移动。将字符串转换为类

我试图使用方法:

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

...移动从一个活动到另一个。

我可以做到这一点好的地方,我直接在硬代码中引用我的新活动,不要尝试从文本(即classA.class)编译它,但是我希望能够通过传递来构建我的意图它由用户编译一些字符串。

例如,如果在一个EditText用户输入B,我想去classB.class 如果用户输入Z,我想去classZ.class

有没有什么办法可以编译我想使用的字符串,然后转换为类?

在此先感谢!

+0

尝试[Classloader.loadClass(HTTP:// d。 android.com/reference/java/lang/ClassLoader.html) – mibollma 2010-12-11 18:57:12

+0

你有多个包 – Trikaldarshi 2013-06-18 17:22:01

回答

5

反射机制可以让你做到这一点:

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

请注意,这些类应包含在Android清单XML。

另外请注意,我没有处理异常在这个例子:)

+1

我试过你的代码。它抛出classnotfoundexception。任何想法为什么? – Varundroid 2012-09-18 09:48:26

+0

它会引发异常,因为您需要将完整的包添加到字符串中,例如'us.foobar.package.some_user_input' – Rico 2014-06-04 16:59:15

0

这是使用Class.forName()方法我的解决方案:

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