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

tjvv9vkg  于 2023-03-16  发布在  Android
关注(0)|答案(4)|浏览(162)

我有一个问题,我的一个android应用程序,我的工作。
我的应用程序有几个部分,下一个加载的屏幕是基于字符串的,所以第一部分的第一个屏幕是S1S1。
我的问题是,我怎样才能启动一个基于字符串的活动。我把S1S1保存在一个字符串中,让我们称之为next activity。我不需要输入S1S1.class,我需要它来自字符串。我已经尝试了我能想到的一切,google没有太大帮助。
我试过的一些方法

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

但好像都不管用有什么办法吗

np8igboo

np8igboo1#

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

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的全名(activityToStart))将是x.y.z.A

ubby3x7f

ubby3x7f2#

一个更好的方法(一个在系统中使用来启动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
pgky5nke

pgky5nke3#

我不知道解决方案,但我有一个替代方案。。类似于div在网页中隐藏和显示的方式。
如果你的s1s1是要载入低内容有他们在一个线性布局和保持他们的可见性去载入表格s1.当你点击s1到达s1s1隐藏s1和设置可见性的参数为“可见”.
通过这样做,您可以避免创建单独的Activity,而且这种方式也很容易向后导航。

zlhcx6iw

zlhcx6iw4#

使用枚举!

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

相关问题