We’d like to pass an Object from one Activity to another in Java Android, there are two ways to do this operation, the first one is to use a Serializable Object while the second one is to use a Parcelable Object.
It is strongly recommended due to performance issues to use the first solution.
Imagine you have a Song Custom Object, you need implements Parcelable in your Song class:
import android.os.Parcel;
import android.os.Parcelable;
public class Song implements Parcelable {
private String title;
private String author;
private String album;
private String genre;
private String location;
public Song (String title, String author, String album, String genre, String location) {
this.title = title;
this.author=author;
this.album=album;
this.genre=genre;
this.location=location;
}
public Song(Parcel in) { //Constructor when loading from Parcel
title = in.readString();
author = in.readString();
album = in.readString();
genre = in.readString();
location = in.readString();
}
//Getters and Setters
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
//Required method, but not used
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
//When Parcel this Object write every variable to Parcel dest
dest.writeString(title);
dest.writeString(author);
dest.writeString(album);
dest.writeString(genre);
dest.writeString(location);
}
//Parcelable Creator, every Parcelable Object should implement this method.
public static final Parcelable.Creator<Song> CREATOR = new Parcelable.Creator<Song>() {
public Song createFromParcel(Parcel in) {
return new Song(in);
}
public Song[] newArray(int size) {
return new Song[size];
}
};
}
Then in the first Activity:
ArrayList<Song> passedList = new ArrayList <Song>();
Intent intent = new Intent(context, SecondActivity.class);
String pkg = getPackageName();
intent.putExtra(pkg+”values”, passedList);
startActivity(intent);
In the second Activity:
ArrayList<Song> passedValues = getIntent().getParcelableArrayListExtra(pkg+”values”);