android - 使 ArrayList<ArrayList<Integer>> 可打包

标签 android parcelable

我正在尝试使以下类可打包。通常,我通过使用 parcelabler 网站来执行此操作。但是该网站的 ArrayList> 部分似乎有问题。有谁知道如何正确地做到这一点? 提前致谢!

package com.example.stoos.data;

import java.util.ArrayList;

import android.os.Parcel;
import android.os.Parcelable;

public class DataModelDiagrammDaten implements Parcelable {
ArrayList<String> Antworten = new ArrayList<String>();
ArrayList<ArrayList<Integer>> AntwortIDs = new ArrayList<ArrayList<Integer>>();

public ArrayList<String> getAntworten() {
    return Antworten;
}

public ArrayList<ArrayList<Integer>> getAntwortIDs() {
    return AntwortIDs;
}

public void setAntworten(ArrayList<String> antworten) {
    Antworten = antworten;
}

public void setAntwortIDs(ArrayList<ArrayList<Integer>> antwortIDs) {
    AntwortIDs = antwortIDs;
}

public DataModelDiagrammDaten(ArrayList<String> antworten,
        ArrayList<ArrayList<Integer>> antwortIDs) {
    super();
    Antworten = antworten;
    AntwortIDs = antwortIDs;
}



protected DataModelDiagrammDaten(Parcel in) {
    if (in.readByte() == 0x01) {
        Antworten = new ArrayList<String>();
        in.readList(Antworten, String.class.getClassLoader());
    } else {
        Antworten = null;
    }
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    if (Antworten == null) {
        dest.writeByte((byte) (0x00));
    } else {
        dest.writeByte((byte) (0x01));
        dest.writeList(Antworten);
    }
}

@SuppressWarnings("unused")
public static final Parcelable.Creator<DataModelDiagrammDaten> CREATOR = new Parcelable.Creator<DataModelDiagrammDaten>() {
    @Override
    public DataModelDiagrammDaten createFromParcel(Parcel in) {
        return new DataModelDiagrammDaten(in);
    }

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

最佳答案

我觉得有点晚了,但希望它对其他人仍然有用。 我尝试像这样将二维数组写入 Parcel:

public class Avatar implements Parcelable {

ArrayList<Integer> arrayList;
ArrayList<ArrayList<Integer>> arrayLists;

public Avatar() {
    arrayLists = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        ArrayList<Integer> temp = new ArrayList<>();
        for (int j = 0; j < 10; j++) {
            temp.add(j);
        }
        arrayLists.add(temp);
    }

    arrayList = new ArrayList<>();
    for (int i = 100; i < 104; i++) {
        arrayList.add(i);
    }
}

protected Avatar(Parcel in) {
    arrayList = new ArrayList<>();
    in.readList(arrayList, Integer.class.getClassLoader());
    arrayLists = new ArrayList<>();
    in.readList(arrayLists, ArrayList.class.getClassLoader());
}

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

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

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeList(arrayList);
    dest.writeList(arrayLists);
}

@Override
public String toString() {
    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 0; i < arrayList.size(); i++) {
        stringBuilder.append(arrayList.get(i) + " ");
    }
    for (int i = 0; i < arrayLists.size(); i++) {
        for (int j = 0; j < arrayLists.get(i).size(); j++) {
            stringBuilder.append(arrayLists.get(i).get(j) + " ");
        }
    }
    return stringBuilder.toString();
}
}

并将类发送到另一个 Activity :

   avatar = new Avatar();
   Intent intent = new Intent();
   intent.setClass(ParcelActivity.this, Parcel2Activity.class);
   intent.putExtra("avatar", avatar);
   startActivity(intent);

在另一个 Activity 中接收:

textView.setText(getIntent().getParcelableExtra("avatar") + "");

它工作正常: test

需要注意的是,Parcel中字段对象的写入和读取必须顺序一致。

关于android - 使 ArrayList<ArrayList<Integer>> 可打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720200/

相关文章:

android - 包裹解码未知类型

Android - 将接口(interface)放在 Bundle 中

android - Parcelable 从数组中获取巨大的无限项目直到 OOM

android - 具有用于定位的可选/条件关系的 RelativeLayout

android - RecyclerView 在向 List 添加新项目时移至顶部

android studio 1.2 gradle 很慢

android - 实现 Parcelable 时使用 Float 而不是 float(Primitive 类型)

android - ToUri() 不会转换所有额外的 Intent (parcelable、serializable、byte[]..)

android - 移动设备使用 PGP 会不会太过分了?

android - 运行时配置更改后 DialogFragment 变为 null