23

I have a interface IA and class B and C that implement them. Both B and C implement Parcelable as well.

Then I have the tricky part:

Class D has a ArrayList< IA >. I need this too insert both classes B and C in the arraylist. They share the same structure but the "IS-A" relation don't apply.

I need to pass D from one activity to another as a Parcel.

I've tried to write (ArrayList<IA>) in.readSerializable but I got a IOException. I know that if IA was not a interface the problem was easy, but I can't seem to find an easy solution for this.

Any ideas?

@SuppressWarnings("unchecked")
public D (Parcel in) {
    list = new ArrayList<IA>();
    (...)    
    list = (ArrayList<IA>) in.readSerializable 
    }

@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
    public D createFromParcel(Parcel in) {
        return new D(in);
    }

    public D[] newArray(int size) {
        return new D[size];
    }
};

public int describeContents() {
    return 0;
}

public void writeToParcel(Parcel dest, int flags) {
    (...)
    dest.writeList(list);
}
Garg
  • 2,731
  • 2
  • 36
  • 47
Pedro Bernardo
  • 973
  • 2
  • 8
  • 17

2 Answers2

43
    @SuppressWarnings("unchecked")
public D (Parcel in) {
    list = new ArrayList<IA>();
    (...)    
    //ERROR -> list = (ArrayList<IA>) in.readSerializable 
    list = in.readArrayList(IA.class.getClassLoader());
}

@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
    public D createFromParcel(Parcel in) {
        return new D(in);
    }

    public D[] newArray(int size) {
        return new D[size];
    }
};

public int describeContents() {
    return 0;
}

public void writeToParcel(Parcel dest, int flags) {
    (...)
    dest.writeList(list);
}
Pedro Bernardo
  • 973
  • 2
  • 8
  • 17
  • i have one problem i think you can help. I have ArrayList> which i want to write to parcel and then read it in next activity. Can you please guide how to do that ? – Gem May 15 '14 at 06:36
  • check this one http://stackoverflow.com/questions/13228714/set-arraylist-hashmap-string-object-value – Pedro Bernardo May 16 '14 at 13:03
  • 2
    How to make sure that the "unchecked" warnings are not there? (Except suppressing them) – Terry Aug 20 '19 at 01:33
1

I recommend you to install "Android Parcelable code generator" plugin. After this you can generate writeToParcel function, constructor which reads from parcel and creator class only whith clicking Alt+Insert buttons.

Axbor Axrorov
  • 2,720
  • 2
  • 17
  • 35