【问题标题】:Can I send class as extra with intent?我可以有意发送课程吗?
【发布时间】:2013-02-25 18:15:14
【问题描述】:

我正在尝试传递额外的类名,该怎么做?

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

【问题讨论】:

  • 你想达到什么目的?
  • 我有设置活动来改变应用程序的主题,所以我需要设置活动来启动完成后调用她的活动。我不能只使用finish()的原因是我需要最后一个活动重新开始,而不是重新开始。

标签: java class android-intent setting extra


【解决方案1】:

比公认答案更简洁的方法是使用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)。

【讨论】:

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

您可以使用此代码

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

【讨论】:

  • 这不应该是首选方法,而是使用 Serializable 或 Parcelable(请参阅this answer
猜你喜欢
  • 2022-01-26
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多