【问题标题】:Pass different classes using Arraylist from one activity to another使用 Arraylist 将不同的类从一个活动传递到另一个活动
【发布时间】:2016-05-10 01:15:57
【问题描述】:

我使用 Tests 类作为基类,我创建了另外三个类,Test1、Test2、Test3,它们扩展了 Tests 类,然后我还有一个类,States,它有一个 Arraylist。

States 用于收集一堆信息,包括包含我要执行的测试的列表,所以我使用 Arraylist 和方法“add”将 test1、test2 或 test3 添加到列表中,然后我想将此 State 对象发送到活动 B。我已经在 Test1、Test2、Test3 和 States 类上实现了 parcelable 接口,但我遇到了下一个异常:

在偏移量 300 处解组未知类型代码 6357090

拜托,可以提出任何方法来实现这一点,在arraylist上收集测试很重要,我认为问题在于,谢谢。

【问题讨论】:

  • 你的测试类扩展了什么?
  • Tests 也实现 parcelable 吗?
  • 它没有从其他类扩展,除了我想是java的对象类
  • 它实现了parcelable,但只有两个简单的项目,一个字符串和一个int,Test1、test2和test3类也用大量但不同类型的数据实现了parcelable。
  • Test1 中的 parcelable 实现是否包含super?例如,protected Test1(Parcel in) { super(in); }

标签: android arraylist parcelable


【解决方案1】:

对不起,评论太长了,所以我发布了作为答案

由于 Test1 扩展了测试,测试应该有它自己的 Parcelable 实现。 此实现由其所有“子”类使用super 调用。例如(这是我在我的应用程序中使用的):

测试类

public class Tests implements Parcelable {
    private int Id;
    private String Name;

    // parcelable
    protected Tests(Parcel in) {
      Id = in.readInt();
      Name = in.readString();
  }

  public static final Creator<Tests> CREATOR = new Creator<Tests>() {
    @Override
    public Tests createFromParcel(Parcel in) {
        return new Tests(in);
    }

    @Override
    public Tests[] newArray(int size) {
        return new Tests[size];
    }
  };

  @Override
  public int describeContents() {
    return 0;
  }

  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(Id);
    dest.writeString(Name);
  }
}

Test1 类

public class Test1 extends Tests implements Parcelable {

  private int Score;

  // parcelable
  protected Test1(Parcel in) {
    super(in);
    Score = in.readInt();
  }

  @Override
  public void writeToParcel(Parcel dest, int flags) {
    super.writeToParcel(dest, flags);
    dest.writeInt(Score);
  }

  @Override
  public int describeContents() {
    return 0;
  }

  public static final Creator<Test1> CREATOR = new Creator<Test1>() {
    @Override
    public Test1 createFromParcel(Parcel in) {
        return new Test1(in);
    }

    @Override
    public Test1[] newArray(int size) {
        return new Test1[size];
    }
  };
}

【讨论】:

  • 你将如何实现States类及其parcelable接口,这个类必须有一个可以包含Test1、Test2或Test3的Arraylist。我将这个类放入一个意图并将意图发送到另一个类,在那里,我得到了可打包的数组列表并检查每个对象的实例,但我得到了那个错误。
  • 这些方法。 Parcel.createTypedArrayList(Tests.CREATOR)。 Parcel.writeTypedList(测试)。
  • 我试过 dest.writeList() 和 dest.writeTypedList() 但它们都不起作用,这是真正的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2021-03-15
  • 1970-01-01
  • 2015-12-18
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多