在活动之间传递2D对象

时间:2013-11-23 00:16:18

标签: android android-intent android-activity parcelable

我知道有很多关于这个主题的问题,但我找不到我的具体案例的答案。基本上我有一个我需要通过的相当简单的类的二维数组。我正在尝试使用Parcelable并通过this运行我的课程来获取此信息:

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

public class Notam implements Parcelable {
public String airfield;
public String identifier;
public String notamText;
public String fromTime;
public String untilTime;
public boolean hidden;

// one constructor
public Notam(String airfieldname, String newIdentifier, String newNotamText, String newFrom, String newUntil) {
    airfield = airfieldname;
    identifier = newIdentifier;
    notamText = newNotamText;
    fromTime = newFrom;
    untilTime = newUntil;
}


public void setHidden(boolean changeHidden) {
    hidden = changeHidden;
}


protected Notam(Parcel in) {
    airfield = in.readString();
    identifier = in.readString();
    notamText = in.readString();
    fromTime = in.readString();
    untilTime = in.readString();
    hidden = in.readByte() != 0x00;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(airfield);
    dest.writeString(identifier);
    dest.writeString(notamText);
    dest.writeString(fromTime);
    dest.writeString(untilTime);
    dest.writeByte((byte) (hidden ? 0x01 : 0x00));
}

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

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

我已经尝试过从这里找到的各种各样的东西,但我现在迷失了。目前在主要活动中我有

Notam[][] notamList = new Notam[10][100];

Intent intent = new Intent(this, NotamList.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("notamList", notamList);
intent.putExtras(bundle);
startActivity(intent);

然后在接收活动中:

Notam[][] notamList = new Notam[10][100];

Bundle data = getIntent().getExtras();
notamList = data.getParcelableArrayList("notamList");

但这甚至没有接近工作,所以我要求你的智慧和指导!

2 个答案:

答案 0 :(得分:2)

在您的MainActivity中:

Notam[][] notamList = new Notam[10][100];

这是创建Notam对象的正确方法吗?我不这么认为。看看你的构造函数:

public Notam(String airfieldname, String newIdentifier, String newNotamText, String newFrom, String newUntil) { ... }

其次,在MainActivity中,您正在创建一个bundle并将Parcelable对象填充到其中,然后将bundle填充到intent中。您可以直接将Parcelable对象置于意图中,如下所示:

intent.putExtras("notamList", correctly_instantiated_Notam_obj);

HTH。 PS:你可以使用java Serializable,以防你熟悉它而不是使用Parcels。 PS:您可以查看此example

答案 1 :(得分:0)

据我所知,这是不可能的。你需要创建一个单一的arraylist并根据评论传递它。