Search code examples
javaandroidandroid-intentparcelable

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?


Solution

  • 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.
        }