I want to pass a list of objects from one activity from another activity. I have one class SharedBooking Below:
public class SharedBooking {
You can also convert the list to a String using Gson
, then pass it like so:
String yourListAsString = new Gson().toJson(yourList);
bundle.putString("data",yourListAsString);
Then retrieve it back using your class as the type:
List<YourList> listName = new Gson().fromJson("data", new TypeToken<List<YourList>>(){}.getType());
public class Student implements Parcelable {
int id;
String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int arg1) {
// TODO Auto-generated method stub
dest.writeInt(id);
dest.writeString(name);
}
public Student(Parcel in) {
id = in.readInt();
name = in.readString();
}
public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
ArrayList<Student> arraylist = new ArrayList<Student>();
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("mylist", arraylist);
intent.putExtras(bundle);
this.startActivity(intent);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Bundle bundle = getIntent().getExtras();
ArrayList<Student> arraylist = bundle.getParcelableArrayList("mylist");
}
You may want to implement the Parcelable Interface in your SharedBooking class and add them to the Intent i.e. with the putParcelableArrayListExtra Method. Check the documentation.
First, make the class of the list implement Serializable.
public class MyObject implements Serializable{}
Then you can just cast the list to (Serializable). Like so:
List<MyObject> list = new ArrayList<>();
myIntent.putExtra("LIST", (Serializable) list);
And to retrieve the list you do:
Intent i = getIntent();
list = (List<MyObject>) i.getSerializableExtra("LIST");
That's it.
Use parcelable. Here is how you will do it:
public class SharedBooking implements Parcelable{
public int account_id;
public Double betrag;
public Double betrag_effected;
public int taxType;
public int tax;
public String postingText;
public SharedBooking() {
account_id = 0;
betrag = 0.0;
betrag_effected = 0.0;
taxType = 0;
tax = 0;
postingText = "";
}
public SharedBooking(Parcel in) {
account_id = in.readInt();
betrag = in.readDouble();
betrag_effected = in.readDouble();
taxType = in.readInt();
tax = in.readInt();
postingText = in.readString();
}
public int getAccount_id() {
return account_id;
}
public void setAccount_id(int account_id) {
this.account_id = account_id;
}
public Double getBetrag() {
return betrag;
}
public void setBetrag(Double betrag) {
this.betrag = betrag;
}
public Double getBetrag_effected() {
return betrag_effected;
}
public void setBetrag_effected(Double betrag_effected) {
this.betrag_effected = betrag_effected;
}
public int getTaxType() {
return taxType;
}
public void setTaxType(int taxType) {
this.taxType = taxType;
}
public int getTax() {
return tax;
}
public void setTax(int tax) {
this.tax = tax;
}
public String getPostingText() {
return postingText;
}
public void setPostingText(String postingText) {
this.postingText = postingText;
}
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(account_id);
dest.writeDouble(betrag);
dest.writeDouble(betrag_effected);
dest.writeInt(taxType);
dest.writeInt(tax);
dest.writeString(postingText);
}
public static final Parcelable.Creator<SharedBooking> CREATOR = new Parcelable.Creator<SharedBooking>()
{
public SharedBooking createFromParcel(Parcel in)
{
return new SharedBooking(in);
}
public SharedBooking[] newArray(int size)
{
return new SharedBooking[size];
}
};
}
Passing the data:
Intent intent = new Intent(getApplicationContext(),YourActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("data", sharedBookingObject);
intent.putExtras(bundle);
startActivity(intent);
Retrieving the data:
Bundle bundle = getIntent().getExtras();
sharedBookingObject = bundle.getParcelable("data");
If there is someone who is looking for answer this is how i implemented it using Kotlin.
Parcelable object class
data class CollectedMilk(
@SerializedName("id")
var id: Int,
@SerializedName("igicuba")
var igicuba: Int,
@SerializedName("collector")
var collector: String?,
@SerializedName("collected")
var collected: Int,
@SerializedName("accepted")
var accepted: Int,
@SerializedName("standard")
var standard: String?,
@SerializedName("created_at")
var created_at: String?,
@SerializedName("updated_at")
var updated_at: String?,
): Parcelable {
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readInt(),
parcel.readString(),
parcel.readInt(),
parcel.readInt(),
parcel.readString(),
parcel.readString(),
parcel.readString()
)
override fun describeContents(): Int {
return 0
}
override fun writeToParcel(parcel: Parcel?, int: Int) {
parcel?.writeInt(id)
parcel?.writeInt(igicuba)
parcel?.writeString(collector)
parcel?.writeInt(collected)
parcel?.writeInt(accepted)
parcel?.writeString(standard)
parcel?.writeString(created_at)
parcel?.writeString(updated_at)
}
companion object CREATOR : Parcelable.Creator<CollectedMilk> {
override fun createFromParcel(parcel: Parcel): CollectedMilk {
return CollectedMilk(parcel)
}
override fun newArray(size: Int): Array<CollectedMilk?> {
return arrayOfNulls(size)
}
}
}
Then in Fragment
collectedMilkAdapter.onItemClick = { collectedMilk ->
Toast.makeText(
MccApp.applicationContext(),
"Collector: " + collectedMilk.collector,
Toast.LENGTH_LONG
).show()
val intent = Intent(MccApp.applicationContext(), CollectedMilkActivity::class.java)
val bundle: Bundle = Bundle()
bundle.putParcelableArrayList("collectedMilk", collectedMilkArrayList)
intent.putExtras(bundle)
activity?.startActivity(intent)
}
Then on another Activity my Detail Activity
Global Variable
private lateinit var collectedMilk: ArrayList<CollectedMilk>
In Function or OnCreate Activity
val bundle = intent.extras
collectedMilk = (bundle?.getParcelableArrayList<CollectedMilk>("collectedMilk") as ArrayList<CollectedMilk>)
Toast(this).showCustomToast(
this,
""+collectedMilk,
dark
)