【问题标题】:Passing complex object to an Activity将复杂对象传递给 Activity
【发布时间】:2011-11-11 11:59:14
【问题描述】:

我正在使用蓝牙应用程序,并且我有一个线程正在侦听输入消息和 2 个活动:主菜单和蓝牙控制台。我在菜单Activity中建立连接,然后我需要将一些对象传递给控制台Activity:

  • 使用其 write() 方法的线程引用
  • 主 Activity 的上下文
  • 还有一个布尔值,我最终需要检查

我阅读了有关使用 Intent.putExtra 并传递可序列化或可解析类对象的信息。我用需要传递的对象编写了一个类,但我不知道该怎么做,甚至不知道可序列化和可解析是什么意思。

难道没有任何简单的方法可以将这些对象从一个 Activity 传递到另一个?

【问题讨论】:

  • 活动有自己的上下文,所以你不需要传递它。 getApplicationContext()
  • 是的。但我仍然需要访问该线程方法和布尔值

标签: android android-activity


【解决方案1】:

您可以扩展Application 并将共享对象放入该类。比如:

public class MyApplication extends Application {
    private boolean myBoolean;

    public boolean getMyBoolean() { return myBoolean; }
}

你可以在这里放任何你想使用的全局变量。

要将应用程序的应用程序设置为 MyAPplication,请使用 AndroidManifest.xml

<application ... android:name=".MyApplication">

【讨论】:

  • 我花了一段时间才明白它与 Manifest 中的应用程序标签相同,而不是使用其中的 2 个。它完美地工作:)
【解决方案2】:

简而言之。不,活动是相互隔离的,因为它们可以跨越进程,所以唯一的可移植选项是序列化它们。但是您可以使用像 Flexjson 这样的库来通过 Intent.putExtra() 序列化普通的旧 Java Bean。比使用 Parcels 手写序列化要简单得多。签出:http://flexjson.sourceforge.net

Android 中存在一个错误,您必须执行以下操作:

/** Fix for Android bug http://code.google.com/p/android/issues/detail?id=5697 */
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2017-02-07
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多