我有一个数据库有许多活动的类名获得类,例如因为意图不起作用开始新的活动由一个String
Intent myActivity = new Intent(CurrentClass.this, activityName);
需要一个类,而不是一个带类名的字符串,
我怎么能通过String activityName获取类?
我想避免宣布太多的意图,只使用我在运行时需要的意图。
我有一个数据库有许多活动的类名获得类,例如因为意图不起作用开始新的活动由一个String
Intent myActivity = new Intent(CurrentClass.this, activityName);
需要一个类,而不是一个带类名的字符串,
我怎么能通过String activityName获取类?
我想避免宣布太多的意图,只使用我在运行时需要的意图。
您可以加载使用反射类,如:
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()
。
希望这会有所帮助..干杯!
Class<?> clazz = Class.forName("yourPackage.YourActivityName");
Intent myActivity = new Intent(CurrentClass.this, clazz);
例子:
Class <?> clazz = Class.forName("com.test.testActivity");
我怎么能获得通过字符串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);
只需将字符串转换为活动名称即可。 This答案可能是您的问题解决方案。希望这可以帮助。
您可以将.class作为参数传递给您的方法 – 2013-04-26 20:31:31
不,我不能,因为我从数据库中获取名称类作为字符串。 – AndreaF 2013-04-26 20:32:36