我可以故意发送课程吗?

Jes*_*rix 10 java class setting android-intent extra

我正试图通过额外传递类名,怎么做?

Intent p = new Intent(StartScreen.this, Setting.class);
p.putExtra(" ",StartScreen.this);
Run Code Online (Sandbox Code Playgroud)

我想在Setting类中获取类名,但我不希望它是String因为我将使用这样的类名:

Bundle extras = getIntent().getExtras();
extras.getString("class");
Intent i = new Intent(Setting.this, class);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

小智 18

你可以使用这段代码

Intent p = new Intent(StartScreen.this, Setting.class);
p.putExtra("class","packagename.classname");
Run Code Online (Sandbox Code Playgroud)

并在设置课程

Bundle extras = getIntent().getExtras();
String classname=extras.getString("class");
Class<?> clazz = Class.forName(classname);
Intent i = new Intent(Setting.this, clazz);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

  • 这不应该是首选方法,而是使用 Serializable 或 Parcelable(参见 [this answer](/sf/answers/2426556051/)) (2认同)

ban*_*ing 12

比接受的答案更整洁的方法是使用SerializableParcelable.

以下是使用以下方法的示例Serializable:

在你的第一个活动......

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("EXTRA_NEXT_ACTIVITY_CLASS", ThirdActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

然后在你的第二个活动......

Bundle extras = getIntent().getExtras();
Class nextActivityClass = (Class<Activity>)extras.getSerializable("EXTRA_NEXT_ACTIVITY_CLASS");
Intent intent = new Intent(SecondActivity.this, nextActivityClass);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

这样做Parcelable几乎是一样的,除非你用extras.getSerializable("EXTRA_NEXT_ACTIVITY_CLASS")上面的代码替换extras.getParcelable("EXTRA_NEXT_ACTIVITY_CLASS").

Parcelable方法会更快,但设置起来比较困难(因为你需要制作第三个Activity工具Parcelable- 请参阅http://developer.android.com/reference/android/os/Parcelable.html).

  • 感谢您的回答!可能值得注意的是,这在开发与批准答案相对应的插件的情况下将起作用。我目前正在开发一个弹出屏幕的插件,该插件需要知道在完成该屏幕后要打开哪个类。在这种情况下,Class.forName将不起作用,因为插件不知道类名称。将类名解析为可序列化的遗嘱。 (2认同)