让我们说你有一个字符串:
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作为类值。
思想?
答案 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对象的类名称。