5

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

我不想查询应用程序对象/单例/静态变量。

这还有可能吗?

4

3 回答 3

11

您可以在另一个活动中声明一个静态变量,或者在应用程序类中声明一些全局变量,然后将其访问到任何活动,例如您想从 OldActivity 解析一些 NewType 类型的对象到类 NewActivity。执行以下操作:

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

public static NewObject newObject=null;

当您调用 NewActivity 时,请执行以下操作。

NewActivity.newObject=item;
Intent intent=new Intent(OldActivity.this, NewActivity.class);
startActivity(intent);
于 2012-07-31T05:02:43.590 回答
1

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

  • 使对象静态。(最简单但并不总是有效)
  • 序列化 -> 发送 -> 接收 -> 反序列化。如果您的类不可序列化,您也可以使用JSON 解码和编码之类的方法。(涉及很多开销,你不想使用这个,除非你有充分的理由)
  • Parcelable(最高效,最快)

这是文档中的一个示例:您可以用 a 包装您的对象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();
     }
 }
于 2012-07-31T05:03:30.300 回答
0

解决方案之一:

你可以制作一个单例类来携带你想要的信息

例如:

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

然后用各自的getter方法取回

确保您处理同步问题;)

于 2012-07-31T05:17:19.577 回答