这些是我的模型类:
public class Animal implements Parcelable{
//parcelable implementation
}
public class Cat extends Animal {
}
public class Dog extends Animal {
}
我想使用 Intent.putExtra(String name, Parcelable [] value)
将 Animal 的 Array
从 Activity
传递到另一个.
所以我这样做:
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");
我不会得到这样的数组:
[0]Dog
[1]Cat
[2]Dog
我得到一个这样的数组:
[0]Animal
[1]Animal
[2]Animal
我不明白 如果我的逻辑不正确,或者当你将像我这样的 Array
传递给 Intent
时,它会变成 SuperClass< 的数组
对象。
谢谢。
最佳答案
尝试创建一个 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
的 Animal
, 所以你所有的对象都是 Animals
.
关于android - 如果我将 List<Child> 放入一个 Intent 中,那么我会从另一个 Activity 中检索 List<Parent>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45920117/