android - 如果我将 List<Child> 放入一个 Intent 中,那么我会从另一个 Activity 中检索 List<Parent>

标签 android android-intent parcelable extends

这些是我的模型类:

public class Animal implements Parcelable{   
//parcelable implementation
}

public class Cat extends Animal {   
}

public class Dog extends Animal {
}

我想使用 Intent.putExtra(String name, Parcelable [] value) 将 Animal 的 ArrayActivity 传递到另一个.

所以我这样做:

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 重新创建对象时它只能调用 CREATORAnimal , 所以你所有的对象都是 Animals .

关于android - 如果我将 List<Child> 放入一个 Intent 中,那么我会从另一个 Activity 中检索 List<Parent>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45920117/

相关文章:

android - onActivityResult 参数的 Intent 是什么

php - Android 从 PHP 传递和接收参数

android - 如何自定义共享菜单

java - 我从 Android ActivityForResult 发送一个可打包类并收到 null

android - Charles Proxy 不适用于 7.0 以上的 Android 版本?

android - NotifyDataSetChanged 在带有 Viewpager2 的 FragmentStateAdapter 中不起作用

java - IntelliJ IDEA 13 和 Android Studio 的区别

java - Parcelable 继承 : abstract class - Which CREATOR?

android - 在 Android Parcelable 类中读写长对象

java - NoClassDefFoundError : com. squareup.picasso.Picasso 带电话