我有以下代码:
private void startLesson(String input) {
Intent intent = new Intent(StartovayaAktivnost.this, OsnovnayaAktivnostORM.class);
intent.putExtra("vybor_razdela", input);
startActivity(intent);
}
我想根据参数启动不同的活动,是否有一个传递类名称的简单解决方案,如
private void startLesson(String input, String activityname) {
Intent intent = new Intent(StartovayaAktivnost.this, activityname.class);
intent.putExtra("vybor_razdela", input);
startActivity(intent);
} //I know it's not gonna work
或唯一的方法是使用像
这样的分支 private void startLesson(String input, String activityname) {
if (activityname.equals("OsnovnayaAktivnost"))
{
Intent intent = new Intent(StartovayaAktivnost.this, OsnovnayaAktivnost.class);
intent.putExtra("vybor_razdela", input);
startActivity(intent);
}
else if (activityname.equals("OsnovnayaAktivnostORM")) {
Intent intent = new Intent(StartovayaAktivnost.this, OsnovnayaAktivnostORM.class);
intent.putExtra("vybor_razdela", input);
startActivity(intent);
}
}
答案 0 :(得分:3)
您可以将一个类作为参数。请考虑以下事项:
private void startLesson(String input, Class activityname) {
Intent intent = new Intent(StartovayaAktivnost.this, activityname);
intent.putExtra("vybor_razdela", input);
startActivity(intent);
}
然后,您可以将方法称为
startLesson("input", Main.class);
与他们使用类作为参数的方式相同。
答案 1 :(得分:1)
你可以这样做:
Class<?> myClass = Class.forName(activityname);
Intent intent = new Intent(StartovayaAktivnost.this, myClass);
intent.putExtra("vybor_razdela", input);
startActivity(intent);
但是,activityname应该是完整的类名。
答案 2 :(得分:1)
您已经有答案向您展示解决方案。我对你的用例更好奇。对于类似的情况,我创建了一个字符串映射到某个基类型的类。将 activityName 传递给该地图时,我会找到该活动。这使您可以更好地控制在这种情况下允许加载哪种类。在您的场景中,更难限制哪些类可以传递到Intent
。但我想他们必须遵守构成某项活动的某些规则。
类似的东西:
Map<String, MyBaseActivityType> activities
如果您每次都需要活动课程的新实例,您可以对其进行一些修改,但我还没有想到这一部分。
但除非你真的需要,否则不要使用 reflection 。它很快就会变得混乱。
答案 3 :(得分:0)
随机尝试找到答案:
private void startLesson(String input, String activityname) throws ClassNotFoundException {
Intent intent = new Intent(StartovayaAktivnost.this, Class.forName(activityname));
intent.putExtra("vybor_razdela", input);
startActivity(intent);
}