如何使用字符串启动新的android活动?

fah*_*yaz 32 java string android class android-activity

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

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

我的问题是,如何基于字符串启动活动.我将S1S1保存在一个字符串中,让我们称之为nextactivity.而不是必须键入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));
Run Code Online (Sandbox Code Playgroud)

并尝试运行

startActivityForResult(myIntent, 0); 
Run Code Online (Sandbox Code Playgroud)

但似乎没什么用.有任何想法吗?

Dha*_*dra 72

这是一个代码,您可以使用该活动的名称开始活动

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

编辑

这里的类名将是包名称的类的全名.例如,如果您的包名称是x.y.z,如果您调用A了活动名称,那么活动的全名将Ax.y.z.A.


Eht*_*ury 33

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

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

context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

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

adb shell
am start com.android.browser/.BrowserActivity
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案.你也可以这样做:`intent.setClassName(context,context.getPackageName()+".MyActivity");` (8认同)