How to pass an object to another activity?
本问题已经有最佳答案,请猛点这里访问。
我需要通过intent将类对象传递给另一个活动。 这是我的班级代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class Model { private String Name; private ArrayList<Trim> trim; public String getName() { return Name; } public void setName(String Name) { this.Name = Name; } public ArrayList<Trim> getTrim() { return trim; } public void setTrim(ArrayList<Trim> trim) { this.trim = trim; } } |
要将对象传递给另一个活动,您需要实现Parcelable。
请仔细阅读为Android编写Parcelable类。 在这里,他们使用Hashmap存储值并将对象传递给另一个类。
要么
创建一个类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | package com.ParcableExample.org; import android.os.Parcel; import android.os.Parcelable; /** * A basic object that can be parcelled to * transfer between objects. */ public class ObjectA implements Parcelable { private String strValue = null; private int intValue = 0; /** * Standard basic constructor for non-parcel * object creation. */ public ObjectA() { } /** * * Constructor to use when re-constructing object * from a parcel. * * @param in a parcel from which to read this object. */ public ObjectA(Parcel in) { readFromParcel(in); } /** * Standard getter * * @return strValue */ public String getStrValue() { return this.strValue; } /** * Standard setter * * @param strValue */ public void setStrValue(String strValue) { this.strValue = strValue; } /** * Standard getter * * @return intValue */ public Integer getIntValue() { return this.intValue; } /** * Standard setter * * @param strValue */ public void setIntValue(Integer intValue) { this.intValue = intValue; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { // We just need to write each field into the // parcel. When we read from parcel, they // will come back in the same order dest.writeString(this.strValue); dest.writeInt(this.intValue); } /** * * Called from the constructor to create this * object from a parcel. * * @param in parcel from which to re-create object. */ public void readFromParcel(Parcel in) { // We just need to read back each // field in the order that it was // written to the parcel this.strValue = in.readString(); this.intValue = in.readInt(); } /** * * This field is needed for Android to be able to * create new objects, individually or as arrays. * * This also means that you can use use the default * constructor to create the object and use another * method to hyrdate it as necessary. */ @SuppressWarnings("unchecked") public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public ObjectA createFromParcel(Parcel in) { return new ObjectA(in); } @Override public Object[] newArray(int size) { return new ObjectA[size]; } }; } |
然后创建一个用于将Object发送到另一个活动的Activity。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package com.ParcableExample.org; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class ParcableExample extends Activity { private Button btnClick; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initControls(); } private void initControls() { btnClick = (Button)findViewById(R.id.btnClick); btnClick.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { ObjectA obj = new ObjectA(); obj.setIntValue(1); obj.setStrValue("Chirag"); Intent i = new Intent(ParcableExample.this,MyActivity.class); i.putExtra("com.package.ObjectA", obj); startActivity(i); } }); } } |
现在最后再创建另一个读取Object的活动并从中获取值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package com.ParcableExample.org; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class MyActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Bundle bundle = getIntent().getExtras(); ObjectA obj = bundle.getParcelable("com.package.ObjectA"); Log.i("---------- Id ","::"+obj.getIntValue()); Log.i("---------- Name","::"+obj.getStrValue()); } } |
您需要在
1 2 3 | Model objModel = new Model(); Intent modelActivity = (Model.this, detail.class); intent.putExtra("ModelObject", objModel); |
并且目标
1 | Model modelObject = getIntent().getSerializableExtra("ModelObject"); |
您的类应该实现
1 2 3 4 5 | MyClass myObject; //... intent=new Intent(this, MyAnotherActivity.class); intent.putExtra("mydata", (Parcelable )myObject); this.startActivity(intent); |