0

我有一个具有许多 Activity 的类名的数据库,例如:

Activity1Name.class
Activity2Name.class
Activity3Name.class

等等

这种方法

public startNewActivity(String activityName){
   Intent myActivity = new Intent(CurrentClass.this, activityName);
                startActivity(myActivity);
}

显然不起作用,因为 Intent

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

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

我如何通过 String activityName 获取课程?

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

4

4 回答 4

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

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

例子 :

Class <?> clazz = Class.forName("com.test.testActivity");
于 2013-04-26T20:33:11.440 回答
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);
于 2013-04-26T20:33:52.540 回答
0

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

于 2013-04-26T20:39:48.670 回答
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()调用。

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

于 2013-04-26T20:34:16.660 回答