这些是我的模型类:
public class Animal implements Parcelable{
//parcelable implementation
}
public class Cat extends Animal {
}
public class Dog extends Animal {
}
我想使用Array
将Activity
动物从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}}个对象的数组。
谢谢。
答案 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
。