alla alla - 18 days ago 10
Android Question

Passing object with arraylist inside of it through Intent

I want Activity2 to receive object (this object has ArrayList of other objects inside) through Intent.
Object to transfer:

public class Card implements Parcelable {

@SerializedName("product_name")
private String productName;
private String description;
private List<Price> prices;

public Card() {
}

public Card(String productName, String description, List<Price> prices) {
this.productName = productName;
this.description = description;
this.prices = prices;
}

protected Card(Parcel in) {
productName = in.readString();
description = in.readString();
}


public static final Creator<Card> CREATOR = new Creator<Card>() {
@Override
public Bundle createFromParcel(Parcel in) {
return new Card(in);
}

@Override
public Card[] newArray(int size) {
return new Card[size];
}
};

public String getProductName() {
return productName;
}

public String getDescription() {
return description;
}

public List<Price> getPrices() {
return prices;
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(productName);
dest.writeString(description);
dest.writeTypedList(prices);
} }


Intent (inside of Fragment):

Intent intent = new Intent(getActivity(), Activity2.class);
intent.putExtra(Activity2.ARG_BUNDLE, card);
startActivity(intent);


Activity2 receives object:

Intent intent = getIntent();
if (intent != null) {
bundle = intent.getParcelableExtra(ARG_BUNDLE);
}


But Activity2 receives only object Card without ArrayList of Price inside (object Price also implements Parcelable). Maybe I'm doing something wrong?

Answer

You are not reading price arraylist in your method.It should be :

protected Card(Parcel in) {
        productName = in.readString();
        description = in.readString();
        prices= in.createTypedArrayList(Price.CREATOR); // add this line to your code.
    }
Comments