将Object传递给另一个活动

时间:2014-09-08 17:08:18

标签: java android object

我找到了这样做的方法

Student student = new Student (18,"Z r");
Intent i = new Intent(this, B.class);
i.putExtra("studentObject", student);
startActivity(i);

问题是如果第一个活动中的对象发生了变化,则另一个活动中没有发生变化。 我想如何使它像一个构造函数,没有对象的副本通过,但它自己的对象。

由于

3 个答案:

答案 0 :(得分:2)

如果将“对象”配置为整个应用程序的单例,那该怎么办?这样,每个人(您的应用)都会看到更改...请参阅此处的一些见解:http://developer.android.com/guide/faq/framework.html#3

例如,在其他一些文件(Student.java)中:

public class Student {
  public String Name;
}

创建自定义应用程序类:

public MyApp extends Application {
   private Student obj = new Student();

   public Student getMyObject() {
       return obj;
   }       

}

应用程序中的任何位置(例如SomeActivity.java):

Student appStudent = ((MyApp) getActivity().getApplicationContext()).getMyObject();
appStudent.Name = "New Name"; // "global" update

答案 1 :(得分:0)

您还可以查看BroadcastReceiver。使用BroadcastReceiver,您可以将消息从一个Activity发送到另一个Activity,并使用接口将对象从一个Activity传递到另一个Activity。

我认为this是一个很好的例子,其中创建了BroadcastReceiver来检查设备的互联网连接。但您可以使用自己的自定义操作轻松地在BroadcastReceiver中将其转换为发送对象。

答案 2 :(得分:0)

在学生班级中实施parcelable,您可以将学生复制到意图中。

How can I make my custom objects Parcelable?

代码适用于parcelable类

> Student student = new Student (18,"Zar E Ahmer"); Intent i = new
> Intent(this, B.class); i.putExtra("studentObject", student);
> startActivity(i);

下面是我使用的实现parcelable的bean类的示例。在这里,您将用学生

替换KmlMarkerOptions
@SuppressLint("ParcelCreator")
public class KmlMarkerOptions implements Parcelable {

public MarkerOptions markeroptions = new MarkerOptions();
public String href = "";
public int hrefhash =-1;
public String id = "";
public long imageId = -1;
public int locationId = -1;
public int markerSize = -1;

public KmlMarkerOptions(){

}

public KmlMarkerOptions(Parcel in) {
    this.markeroptions = in.readParcelable(null);
    this.href = in.readString();
    this.hrefhash = in.readInt();
    this.id = in.readString();
    this.imageId = in.readLong();
    this.locationId = in.readInt();
    this.markerSize = in.readInt();
}

@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public KmlSummary createFromParcel(Parcel in) {
        return new KmlSummary(in);
    }

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

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeParcelable(markeroptions, 0);
    dest.writeString(href);
    dest.writeInt(hrefhash);
    dest.writeString(id);
    dest.writeLong(imageId);
    dest.writeInt(locationId);
    dest.writeInt(markerSize);
}
}