2013-04-26 53 views
0

我有一个数据库有许多活动的类名获得类,例如因为意图不起作用开始新的活动由一个String

Intent myActivity = new Intent(CurrentClass.this, activityName); 

需要一个类,而不是一个带类名的字符串,

我怎么能通过String activityName获取类?

我想避免宣布太多的意图,只使用我在运行时需要的意图。

+0

您可以将.cl​​ass作为参数传递给您的方法 – 2013-04-26 20:31:31

+0

不,我不能,因为我从数据库中获取名称类作为字符串。 – AndreaF 2013-04-26 20:32:36

回答

0

您可以加载使用反射类,如:

public startNewActivity(String activityName){ 
    try { 
     Class<?> clazz = Class.forName(getPackageName() +"." +activityName); 

     Intent myActivity = new Intent(CurrentClass.this, clazz); 
     startActivity(myActivity); 

    } catch (Exception e) { 
     Log.e("TAG","Error: " +e.getStackTrace()); 
    } 
} 

如果您提供完整的类名(包括包名),你不需要拨打getPackageName()

希望这会有所帮助..干杯!

3
Class<?> clazz = Class.forName("yourPackage.YourActivityName"); 

Intent myActivity = new Intent(CurrentClass.this, clazz); 

例子:

Class <?> clazz = Class.forName("com.test.testActivity"); 
1

我怎么能获得通过字符串activityName类?

我想你需要的东西是这样的:

Class<?> target = Class.forName(<yourPackage>.ActivityName); 
Intent i = new Intent(Caller.this, target); 

在你的情况,你需要从数据库字符串从0至点位置上获得。

伪代码:

String stringFromDb = "Activity1Name.class"; 
int i = stringFromDb.lastIndexOf("."); 
String actName = stringFromDb.subString(0, i); 
Class<?> target = Class.forName(<package> + "." + actName); // getPackageName() 
Intent i = new Intent(Caller.this, target); 
0

只需将字符串转换为活动名称即可。 This答案可能是您的问题解决方案。希望这可以帮助。

相关问题