2013-11-23 226 views
1

我知道在这个主题上有很多问题,但我无法找到针对特定情况的答案。基本上我有一个相当简单的类的二维数组,我需要通过。我试图用Parcelable,我跑我的课通过this得到这个:在活动之间传递2D对象

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"); 

但是,这不是甚至接近工作,所以我问你的智慧和指导!

+0

请说明“甚至不接近工作”的含义。 – Egor

+0

嗯,我在主活动中出现这个错误“Bundle类型中的方法putParcelableArrayList(String,ArrayList <?extends Parcelable>)不适用于参数(String,Notam [] [])”和接收活动“Multiple在这条线 \t标记 - 类型不匹配:不能从NOTAM转换为NOTAM [] \t - 类型不匹配:不能从ArrayList中转换为NOTAM [] []” – Gavin

回答

2

在您的MainActivity:

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

这是正确的方式来创建对象NOTAM?我不这么认为。看看你的构造:

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

其次,再次MainActivity,你正在创建一个包和馅Parcelable对象到它,然后将馅包入意图。您可以直接将Parcelable对象设置为这样的意图:

intent.putExtras("notamList", correctly_instantiated_Notam_obj); 

HTH。 PS:你可以使用Java Serializable,以防你熟悉这一点,而不是使用Parcels。 PS:你可以看看这example

+0

我只是初始化数组那里。稍后,我用notamList填充它[Integer.parseInt(params [1])] [counter ++] = new Notam(\t \t \t \t \t \t params [0],link.text()。substring(0,8)从,直至); – Gavin

+0

此外,您将它与所有其他人一样链接起来。它只是通过一个班级。我正在尝试传递一个二维数组类。那是我的问题?或者我不应该试图做到这一点,我应该尝试做别的事情? – Gavin

+0

您通常一次发送一个对象。现在,没有任何东西阻止您创建另一个具有ArrayList的基类Notam或ArrayList的ArrayList的类。你可以这样做,或者你可以创建一系列intent.putExtras(“notamList_”+ row_num +“_”+ col_num,incorrect_instantiated_Notam_obj);通过一个嵌套for循环,并适当地在另一端unmarshall。留给你的创造力。 HTH。 –

0

据我可以告诉这是不可能的。你需要创建一个单一的数组列表,并按照评论传递。