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

时间:2011-04-22 11:16:26

标签: java android string 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));

并尝试使用

运行
startActivityForResult(myIntent, 0); 

但似乎没有任何效果。有什么想法吗?

4 个答案:

答案 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);