2013-11-23 227 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

據我可以告訴這是不可能的。你需要創建一個單一的數組列表,並按照評論傳遞。