2013-08-29 84 views
0

我創建了一個名爲「Player」的類。在intents之間傳遞class ArrayList

public class Player{ 
    public String name; 
    public int score; 
} 

每當我點擊一個按鈕,一個新的TextView被生成,並且還有一個新的Player類。這是代碼:

private TextView createNewTextView (String text){ 
    final LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    final TextView newTextView = new TextView(this); 

    newTextView.setLayoutParams(lparams); 
    newTextView.setText(text); 

    Player newPlayer = new Player(); 
    newPlayer.name = text; 
    newPlayer.score = 0; 
    players.add(newPlayer); 
    zacniIgro.putExtra("players", (ArrayList<Player>) players); 
    return newTextView; 
} 

這是正確的方法嗎?我認爲這是一個小缺陷,因爲每次點擊一個按鈕時,都會在「newPlayer」標籤下添加一個新播放器。我該如何解決?

而我的主要問題是這樣的;如何在第二個活動中「解壓縮」ArrayList,以便我可以使用ArrayList的每個元素進行操作?我試過getStringArrayListExtra(),但它不起作用。我也嘗試過getExtras(),但是它也沒有工作,因爲它檢索一個包。或者這是正確的方式?但是,我該怎麼處理這個軟件包呢?

+1

嘗試執行'Parceable',或其他方法是使用google的gson api,並以String格式將對象轉換爲JSONObjects,然後以字符串格式發送'JSONArray'在您的活動之間,因此在目標活動中,您將使用gson api輕鬆解析您的JSONArray – Houcine

回答

1

「標籤」newPlayer只是局部變量的名稱,每次運行該方法時總是一個不同的東西,所以這裏沒有問題。

當您在此處致電putExtra()players被解釋爲Serializable因此相應的呼叫爲getSerializableExtra("players")。結果必須輸入ArrayList<Player>

爲了使這項工作,你必須另外使Player類可序列化。在這裏你可以實現接口Serializable

0

更好的方法是使用Parcelable

簡單的例子:

public class Device implements Parcelable { 

private String name; 
private String hash; 

/** 
* Default private constructor. 
*/ 
public Device() { 

} 

public Device(final Parcel parcel) { 
    super(); 

    readFromParcel(parcel); 
} 

public static final Parcelable.Creator<Device> CREATOR = new Parcelable.Creator<Device>() { 

    @Override 
    public Device createFromParcel(final Parcel source) { 
     return new Device(source); 
    } 

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

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

@Override 
public void writeToParcel(final Parcel parcel, final int flags) { 
    parcel.writeString(name); 
    parcel.writeString(hash); 
} 

private void readFromParcel(final Parcel parcel) { 
    this.name = parcel.readString(); 
    this.hash = parcel.readString(); 
} 

把你對象的意圖是這樣的:

intent.putParcelableArrayListExtra("Key", YourObject); 

要獲得另一個畫面:

Intent intent = getIntent(); 
intent.getParcelableArrayExtra("key"); 
相關問題