如何在字符串中使用类名启动新的 Android 活动?

2022-09-01 00:46:52

我正在处理的Android应用程序有问题。

我的应用程序有几个部分,加载的下一个屏幕基于字符串。因此,第 1 节的屏幕 1 将是 S1S1。

我的问题是,如何根据字符串启动活动。我已将S1S1保存在字符串中,让我们将其称为下一个活动。我不需要键入S1S1.class,而是需要它来自字符串。我已经尝试了我能想到的一切,谷歌并没有帮助太多。

我尝试过的一些事情是

Intent myIntent = new Intent(nextactivity);
Intent myIntent = new Intent(v.getContext(), getClass().getName().valueOf(nextactivity));
Intent myIntent = new Intent(v.getContext(), Class.forName(nextactivity));

并尝试使用

startActivityForResult(myIntent, 0); 

但似乎没有什么工作。有什么想法吗?


答案 1

下面是一个代码,通过该代码,您可以使用活动的名称启动活动

String activityToStart = "com.example.MainActivity";
try {
    Class<?> c = Class.forName(activityToStart);
    Intent intent = new Intent(this, c);
    startActivity(intent);
} catch (ClassNotFoundException ignored) {
}

编辑

这里的类名将是带有包名的类的全名。例如,如果您的包名称将是,并且如果您调用了活动名称,则活动的全名将为 。x.y.zAAx.y.z.A


答案 2

更好的方法(以及在系统中用于启动浏览器的方法.apk以及其他未与AOSP捆绑在一起的应用程序):

Intent intent = new Intent();
intent.setClassName("com.android.browser","com.android.BrowserActivity");

context.startActivity(intent);

或者,如果要检查是否可以从命令行启动 ,则可以从 shell 执行如下操作:Activity

adb shell
am start com.android.browser/.BrowserActivity