如果我将List <child>放入Intent,那么我从另一个Activity中检索List <parent>

时间:2017-08-28 13:21:39

标签: android android-intent parcelable extends

这些是我的模型类:

public class Animal implements Parcelable{   
//parcelable implementation
}

public class Cat extends Animal {   
}

public class Dog extends Animal {
}

我想使用ArrayActivity动物从Intent.putExtra(String name, Parcelable [] value)传递到另一个动物。

所以我这样做:

List<Animal> animals = new Array[3];
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new Dog();

Intent.putExtra("myAnimals", animals ).

当我尝试使用:

从另一个Activity检索数组时
Parcelable[] p = (Parcelable[])data.getParcelableArrayExtra("myAnimals");

DON&#39; T 得到这样的数组:

[0]Dog
[1]Cat
[2]Dog

我得到一个这样的数组:

[0]Animal
[1]Animal
[2]Animal

我不明白如果我的逻辑不正确,或者当我将Array像我的Intent传递给SuperClass时,它会变成{{1}}个对象的数组。

谢谢。

1 个答案:

答案 0 :(得分:3)

尝试在每个子类中创建一个CREATOR字段,例如

public static final Parcelable.Creator<Cat> CREATOR
         = new Parcelable.Creator<Cat>() {
     public Cat createFromParcel(Parcel in) {
         return new Cat(in);
     }

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

可能您只在基类Animal中包含此字段,因此当Android尝试从Parcelable重新创建对象时,它只能调用CREATOR的{​​{1}},所以你的所有对象都是Animal