【问题标题】:How to pass a just created object from one activity to another?如何将刚刚创建的对象从一个活动传递到另一个活动?
【发布时间】:2013-03-27 22:08:53
【问题描述】:

我的应用包含 2 个活动。 Activity A 是通过启动应用程序创建的。在这一个中,我创建了我自己的 MyClass 类的对象。此类包含一个字符串和 3 个整数。在活动 A 中,该对象被写入。 第二个活动 B 需要读取这个对象。我怎样才能将它从 A 传递到 B?还是有其他解决方案?

【问题讨论】:

  • here检查这个答案。

标签: android android-intent android-activity


【解决方案1】:

有几种方法可以将对象从一个活动传递到另一个活动:

1.应用程序类:此类对您的所有应用程序 Activity 可见,因此您可以从一个 Activity 将您的对象保存在此类中,然后从另一个 Activity 访问它。

2. 您可以将您的 Class 分解为简单的变量:字符串和 3 个整数,然后通过 bundle 或 Intent 将它们从一个活动传递到另一个活动,然后再次构造您的对象。

Intent intent = new Intent (this, TargetActivity.class);
intent.putExtra(KEY, value);
intent.putExtra(KEY, "value");
startActivity(intent);  

3.如果您的对象实现了 Serializable/Parcelable,那么您可以通过捆绑包传递它。

如何序列化对象的示例:

How do I serialize an object and save it to a file in Android?

【讨论】:

  • Thx :) 但是这个“Serializable”是什么?
  • 想象一下试图通过一扇门移动一大件家具,但它太大了。相反,您将其拆开并通过门单文件移动每一块。一旦进入,你就可以重建这件家具。本质上,这就是 Serializable 允许您做的事情。您可以获取一个复杂的对象,将其解构为更简单的形式,然后重新构造回复杂的形式(在这种情况下,在通过 Bundle 传递它之后)。
  • 谢谢你,但是我的课和使用它引起了一些新的问题。我更愿意改变我的整个计划。
  • 好的,我的回答对你有帮助吗?
【解决方案2】:

一个选项可能是实现 Serializable 接口,然后您可以使用 Intent#putExtra() 方法的 putExtra(Serializable..) 变体在 Intent 中传递对象实例。

    //to pass :
   intent.putExtra("MyClass", obj);  

// to retrieve object in second Activity
getIntent().getSerializableExtra("MyClass");

【讨论】:

  • 谢谢你,但是我的课和使用它引起了一些新的问题。我更愿意改变我的整个计划。
  • @LosTheAlef:一定是一个非常令人兴奋的应用程序,如果连问题都引起了。 ;)
【解决方案3】:

这可能很棘手,因为无法保证您的应用程序不会在活动之间被终止。实际上,它可以在 活动期间被杀死,因此保留持久对象可能会很棘手。

我首选的方法是“单例模式”,您可以在其中创建一个类,其目的是创建一个包含您想要保留的任何数据的单个实例。如果您的应用程序被终止,单例实例将丢失并且必须重新创建,但所有 Android 应用程序始终都存在这种风险。

请参阅Save multiple instances states of the same Activity in Android,了解我在 Android 中的单例实现。

哦,我应该补充一点,这仅适用于所有活动都在同一个进程中,共享相同地址空间的应用程序。否则,您必须使您的对象可序列化并将其写入文件。

【讨论】:

  • 或者,您可以按照 Emil 的建议让您的对象可序列化。
  • 谢谢你,但是我的课和使用它引起了一些新的问题。我更愿意改变我的整个计划。
猜你喜欢
  • 1970-01-01
  • 2013-01-12
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2018-10-10
  • 1970-01-01
相关资源
最近更新 更多