我有一个DB,其类名称为多个Activity,例如:
Activity1Name.class
Activity2Name.class
Activity3Name.class
等
这种方法
public startNewActivity(String activityName){
Intent myActivity = new Intent(CurrentClass.this, activityName);
startActivity(myActivity);
}
显然不起作用,因为意图
Intent myActivity = new Intent(CurrentClass.this, activityName);
需要一个类,而不是具有类名的String
我怎样才能通过String activityName获取类?
我想避免声明太多的意图,只使用运行时需要的Intent。
答案 0 :(得分:3)
Class<?> clazz = Class.forName("yourPackage.YourActivityName");
Intent myActivity = new Intent(CurrentClass.this, clazz);
示例:
Class <?> clazz = Class.forName("com.test.testActivity");
答案 1 :(得分:1)
我怎样才能通过String 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);
答案 2 :(得分: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 :(得分:0)
只需将字符串转换为活动名称即可。 This回答可能是您的问题解决方案。希望这会有所帮助。