【问题标题】:If I put List<Child> into an Intent, then I retrieve List<Parent> from the other Activity如果我将 List<Child> 放入 Intent,然后我从另一个 Activity 检索 List<Parent>
【发布时间】:2017-08-28 13:21:39
【问题描述】:

这些是我的模型类:

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 传递给另一个 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");

不要得到这样的数组:

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

我得到一个这样的数组:

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

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

谢谢。

【问题讨论】:

    标签: android android-intent parcelable extends


    【解决方案1】:

    尝试在您的每个子类中创建一个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重新创建对象时,它只能调用AnimalCREATOR,所以你所有的对象都是Animals .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-13
      • 2019-07-10
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      相关资源
      最近更新 更多