如何将引用(不可序列化)从一个Activity传递到另一个Activity?

时间:2012-07-31 04:58:49

标签: java android android-activity

假设我有一个对象的引用,我应该如何将它从一个Activity传递到另一个Activity?

我不想查询Application Object / singletons / static变量。

这还有可能吗?

3 个答案:

答案 0 :(得分:10)

您可以在另一个活动中声明一个静态变量,或在Application类中声明一些全局变量,然后从OldActivity将其访问任何活动,就像您要将类型NewType的一些Object解析为Class NewActivity一样。请执行以下操作:

在NewActivity.java中声明一个静态NewType对象。

public static NewObject newObject=null;

在调用NewActivity时执行以下操作。

NewActivity.newObject=item;
Intent intent=new Intent(OldActivity.this, NewActivity.class);
startActivity(intent);

答案 1 :(得分:1)

您可以通过以下方式之一进行操作:

  • 使对象静态。 (最容易但并不总是有效)
  • 序列化 - >发送 - >接收 - >反序列化。如果您的类不可序列化,您也可以使用类似JSON decoding and encoding的内容。 (涉及很多头脑,你不想使用它,除非你有充分的理由)
  • Parcelable(效率最高,最快)

这是来自文档的例子:你可以用parcelable包裹你的对象,将它附加到一个意图,并在接收活动中“解包”它。

 public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };

     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }

答案 2 :(得分:-1)

其中一个解决方案:

您可以创建一个单例类来传递您想要的信息

例如:

StorageManager.getInstance().saveSomething(Object obj);

然后使用相应的getter方法检索

确保您处理同步问题;)