我可以故意发送课程吗?

时间:2013-03-10 15:25:25

标签: java class android-intent setting extra

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

Intent p = new Intent(StartScreen.this, Setting.class);
p.putExtra(" ",StartScreen.this);

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

Bundle extras = getIntent().getExtras();
extras.getString("class");
Intent i = new Intent(Setting.this, class);
startActivity(i);

2 个答案:

答案 0 :(得分:16)

您可以使用此代码

Intent p = new Intent(StartScreen.this, Setting.class);
p.putExtra("class","packagename.classname");

并在设置课程

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

答案 1 :(得分:10)

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

以下是使用Serializable

进行操作的示例

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

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("EXTRA_NEXT_ACTIVITY_CLASS", ThirdActivity.class);
startActivity(intent);

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

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

使用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)。