13

我试图通过额外的类名,怎么做?

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

2 回答 2

20

你可以使用这个代码

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);
于 2013-03-10T16:23:18.690 回答
12

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

这是一个如何使用的示例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)。

于 2016-01-07T21:01:38.453 回答