传递一个字符串"动态"作为Android Studio中的类名

时间:2016-12-20 05:31:37

标签: android android-intent

让我们说你有一个字符串:

String string_name; //assign whatever value

你有意图:

Intent i = new Intent(getApplicationContext(), string_name.class);

这显然不起作用。 AS不会将 string_name 识别为类(尽管IT EXISTS是主文件夹中的活动)。 forname方法对我来说也不起作用(除非我做错了)。

我有10个活动/班级列出了name1,name2,name3等等......在我完成每项活动之后,该程序进入了" Transition"活动页面,然后在运行时重定向到下一个活动。因此,在用户完成name1活动后,程序会将他重定向到" Transition"页。之后,我尝试将它们发送到name2活动。等等。

我尝试做的是在"转换"中将name1,name2,活动的名称分配给字符串(在本例中为 string_name )。活动/班。在几行代码之后,我设法检索name1的名称,将其更改为name2,并将其存储在字符串中。但Android Studio不接受动态" string作为类值。

思想?

5 个答案:

答案 0 :(得分:0)

<强> 更新 您可以使用Class.forName(String string_name)String获取课程。但是在String中,您必须提供该class的完整包名。

    String string_name = "com.your_package.TestActivity";
    try {
        Class<?> classByName = Class.forName(string_name);
        Intent i = new Intent(this, classByName.class);
    } catch (ClassNotFoundException e) {
        Log.e("YourParentClassName", "System can't find class with given name: " + string_name);
    }

答案 1 :(得分:0)

看起来这个代码段可以帮到你:

String string_name = "com.package.ActivityToStart";
Intent i = null;
try {
    i = new Intent(this, (Class<?>) Class.forName(string_name).newInstance());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
    Log.e("YourParentClassName", "System can't find class with given name: " + string_name, e);
}
if (i != null) {
    // do your work
}

答案 2 :(得分:0)

而不是:

Intent i = new Intent(getApplicationContext(), string_name.class);

你可以这样做:

Intent i = new Intent();
// Set the component using a String
i.setClassName(getApplicationContext(), string_name);

注意:确保您的所有活动都在清单中声明。

答案 3 :(得分:0)

对于从字符串到类名的转换,您需要正确地给您的包名称,否则它将始终抛出异常

String s = "yourclassname";
try {
  context.startActivity(new Intent(context, Class.forName("your.package.name." + s)));
} catch (ClassNotFoundException e) {
  Toast.makeText(context, s + " does not exist yet", Toast.LENGTH_SHORT).show();
}

答案 4 :(得分:0)

Class.forName()用于创建类Class的对象。下面是语法:

Class c = Class.forName(String className)

上面的语句为作为String参数(className)传递的类创建Class对象。请注意,参数className必须是要为其创建Class对象的所需类的标准名称。 java中任何返回相同类对象的类中的方法也称为工厂方法。将在运行时确定要为其创建Class对象的类名称。