Android 如何将对象传递给新活动?(如何注射)

Android 如何将对象传递给新活动?(如何注射),android,android-activity,android-intent,Android,Android Activity,Android Intent,我想传递一个对象(不是数据!),它实现了一个新活动的接口(比如IConnect)。 活动将从此对象调用一些方法来获取数据 怎么做?(我想Serializable和Parcelable是用于对象/数据/结构的,而不是用于“执行”某些操作的对象/接口) 我应该在Intent extras中传递类名吗?然后活动将创建所需的对象? 如何将对象(几个实现IConnect的不同类)注入到新活动?Android文档中有一个条目-如果您谈论的是非持久对象,您的选项将是: 独生子女班 公共静态字段/方法 指向对

我想传递一个对象(不是数据!),它实现了一个新活动的接口(比如IConnect)。 活动将从此对象调用一些方法来获取数据

怎么做?(我想Serializable和Parcelable是用于对象/数据/结构的,而不是用于“执行”某些操作的对象/接口)

我应该在Intent extras中传递类名吗?然后活动将创建所需的对象?
如何将对象(几个实现IConnect的不同类)注入到新活动?

Android文档中有一个条目-如果您谈论的是非持久对象,您的选项将是:

  • 独生子女班
  • 公共静态字段/方法
  • 指向对象的WeakReference的哈希映射

顺便说一句,我真的不明白对象和数据之间的区别。对象包含字段和一组处理字段的方法。但是,不管这个对象是否有一些方法,它们都不会成为其状态的一部分。如果您传递一个对象,您只需要传递它的状态,这样您就可以使用序列化(通过可序列化或可打包接口)保存状态,然后还原它。

Android文档中有一个条目-如果您谈论的是非持久性对象,您的选项将是:

  • 独生子女班
  • 公共静态字段/方法
  • 指向对象的WeakReference的哈希映射

顺便说一句,我真的不明白对象和数据之间的区别。对象包含字段和一组处理字段的方法。但是,不管这个对象是否有一些方法,它们都不会成为其状态的一部分。如果传递对象,则只需传递其状态,这样您就可以使用序列化(通过Serializable或Parcelable接口)保存状态,然后将其还原。

Parcelable是一个选项。它将从您的对象写入数据,并从数据创建新对象。它就像保存和加载数据一样


请看一看您应该如何实现它。

可包裹是一个选项。它将从您的对象写入数据,并从数据创建新对象。它就像保存和加载数据一样


看看应该如何实现它。

如果您只是想找到一种在活动之间传递对象的方法,您可以重写应用程序类

使用应用程序类的方法

扩展应用程序类并添加对象作为其属性。在任何活动中,如果调用下面的代码,它将返回一个单例

MyApplication appContext = (MyApplication) getApplication();
要实现这一点,您需要将其添加到清单文件的应用程序标记中

 android:name=".MyApplication"

此方法用于在应用程序周围传递值和对象。

如果您只是试图找到在活动之间传递对象的方法,则可以覆盖应用程序类

使用应用程序类的方法

扩展应用程序类并添加对象作为其属性。在任何活动中,如果调用下面的代码,它将返回一个单例

MyApplication appContext = (MyApplication) getApplication();
要实现这一点,您需要将其添加到清单文件的应用程序标记中

 android:name=".MyApplication"
此方法用于在应用程序周围传递值和对象。

MyParcelable.java
ReceiveParcelable.java
希望这有帮助

MyParcelable.java
ReceiveParcelable.java

希望这有帮助

现在,我为目的地活动做了:

    String className = getIntent().getStringExtra("com.myproject.ModelClass");
    IModel model = (IModel)Class.forName(className).newInstance();

我在活动中有一个具体的实现操作。

目前,我为目标活动执行了以下操作:

    String className = getIntent().getStringExtra("com.myproject.ModelClass");
    IModel model = (IModel)Class.forName(className).newInstance();

我在活动中有一个特定的实现操作。

但我不想传递数据(我知道如何使用捆绑包/包裹)。我想传递实现某些接口并执行某些操作(如连接到internet/其他资源,具体取决于实现)的对象。为什么要传递不包含数据的对象?然后创建一个新的。如果它真的没有内部状态,那么它将像旧的一样工作。因为这个对象做了一些事情,它实现了一些接口。你是什么意思?它有方法吗?或者它是在做某事的中间?它有一些有逻辑的方法。我可以在活动中使用带参数的工厂,也可以从类名创建一个新对象(我已经发布了回复),但我不想传递数据(我知道如何使用捆绑包/包裹)。我想传递实现某些接口并执行某些操作(如连接到internet/其他资源,具体取决于实现)的对象。为什么要传递不包含数据的对象?然后创建一个新的。如果它真的没有内部状态,那么它将像旧的一样工作。因为这个对象做了一些事情,它实现了一些接口。你是什么意思?它有方法吗?或者它是在做某事的中间?它有一些有逻辑的方法。我可以在活动中使用带参数的工厂,也可以从类名创建一个新对象(我已经发布了一个回复),感谢全面的示例:)现在,我决定使用:String className=getIntent().getStringExtra(“com.myproject.ModelClass”);IModel model=(IModel)Class.forName(className).newInstance();感谢您提供了全面的示例:)现在,我决定使用:String className=getIntent().getStringExtra(“com.myproject.ModelClass”);IModel model=(IModel)Class.forName(className).newInstance();