Passing custom object between activities
suggest changeIt is also possible to pass your custom object to other activities using the Bundle
class.
There are two ways:
Serializable
interface—for Java and AndroidParcelable
interface—memory efficient, only for Android (recommended)
Parcelable
Parcelable processing is much faster than serializable. One of the reasons for this is that we are being explicit about the serialization process instead of using reflection to infer it. It also stands to reason that the code has been heavily optimized for this purpose.
public class MyObjects implements Parcelable { private int age; private String name; private ArrayList<String> address; public MyObjects(String name, int age, ArrayList<String> address) { this.name = name; this.age = age; this.address = address; } public MyObjects(Parcel source) { age = source.readInt(); name = source.readString(); address = source.createStringArrayList(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(age); dest.writeString(name); dest.writeStringList(address); } public int getAge() { return age; } public String getName() { return name; } public ArrayList<String> getAddress() { if (!(address == null)) return address; else return new ArrayList<String>(); } public static final Creator<MyObjects> CREATOR = new Creator<MyObjects>() { @Override public MyObjects[] newArray(int size) { return new MyObjects[size]; } @Override public MyObjects createFromParcel(Parcel source) { return new MyObjects(source); } }; }
Sending Activity Code
MyObject mObject = new MyObject("name","age","Address array here"); //Passing MyOject Intent mIntent = new Intent(FromActivity.this, ToActivity.class); mIntent.putExtra("UniqueKey", mObject); startActivity(mIntent);
Receiving the object in destination activity.
//Getting MyObjects Intent mIntent = getIntent(); MyObjects workorder = (MyObjects) mIntent.getParcelable("UniqueKey");
You can pass Arraylist of Parceble object as below
//Array of MyObjects ArrayList<MyObject> mUsers; //Passing MyObject List Intent mIntent = new Intent(FromActivity.this, ToActivity.class); mIntent.putParcelableArrayListExtra("UniqueKey", mUsers); startActivity(mIntent); //Getting MyObject List Intent mIntent = getIntent(); ArrayList<MyObjects> mUsers = mIntent.getParcelableArrayList("UniqueKey");
Note: There are Android Studio plugins such as this one available to generate Parcelable code
Serializable
Sending Activity Code
Product product = new Product(); Bundle bundle = new Bundle(); bundle.putSerializable("product", product); Intent cartIntent = new Intent(mContext, ShowCartActivity.class); cartIntent.putExtras(bundle); mContext.startActivity(cartIntent);
Receiving the object in destination activity.
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = this.getIntent().getExtras(); Product product = null; if (bundle != null) { product = (Product) bundle.getSerializable("product"); }
Arraylist
of Serializable object: same as single object passing
Custom object should implement the Serializable
interface.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents