我找到了这样做的方法
Student student = new Student (18,"Z r");
Intent i = new Intent(this, B.class);
i.putExtra("studentObject", student);
startActivity(i);
问题是如果第一个活动中的对象发生了变化,则另一个活动中没有发生变化。 我想如何使它像一个构造函数,没有对象的副本通过,但它自己的对象。
由于
答案 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);
}
}