我正在处理我正在处理的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));
并尝试使用
运行startActivityForResult(myIntent, 0);
但似乎没有任何效果。有什么想法吗?
答案 0 :(得分:63)
以下是您可以使用活动名称
开始活动的代码String activityToStart = "com.example.MainActivity";
try {
Class<?> c = Class.forName(activityToStart);
Intent intent = new Intent(this, c);
startActivity(intent);
} catch (ClassNotFoundException ignored) {
}
修改强>
此处类名将是包名称的类的全名。
例如,如果您的包名称为x.y.z
,并且您的活动名称为A
,则活动A
的全名将为x.y.z.A
。
答案 1 :(得分:30)
一种更好的方法(系统中使用的方法是启动Browser.apk以及未与AOSP捆绑在一起的其他应用程序):
Intent intent = new Intent();
intent.setClassName("com.android.browser","com.android.BrowserActivity");
context.startActivity(intent);
或者,如果要检查是否可以从命令行启动Activity
,可以从shell执行以下操作:
adb shell
am start com.android.browser/.BrowserActivity
答案 2 :(得分:0)
我不知道解决方案,但我有一个替代方案..类似于div隐藏和显示在网页中的方式。
如果您的s1s1要加载低内容,则将它们放在线性布局中,并在加载表单s1时保持其可见性。当你点击s1到达s1s1时,隐藏s1并将可见性的参数设置为“可见”。
通过这样做,您可以避免创建单独的活动,这种方式也很容易导航回来。
答案 3 :(得分:-2)
使用枚举!
public enum SectionActivity {
S1S1(MyS1Activity.class),
S1S2(S2Activity.class);
private Class<? extends Activity> activityClass;
private SectionActivity(Class<? extends Activity> clazz) {
this.activityClass = clazz;
}
public Class<? extends Activity> getActivity {
return activityClass;
}
}
然后在代码的某处:
SectionActivity act = SectionActivity.valueOf(string);
Intent intent = new Intent(this, act.getActivity());
startActivity(intent);