2012-12-27 118 views
16

我試圖通過使用Parcelable來保存我的Fragment中的狀態。Parcel.readStringArray()的參數是什麼?

這導致下面的代碼時,我想找回一個字符串數組,我保存在Parcelable:

public MyObject createFromParcel(Parcel in) { 
      titles=in.readStringArray(???); 
} 

現在readStringArray需要一個參數,一個String[] ......但是,爲什麼?它可以給我存儲的字符串。我不知道有多少人,所以這很糟糕。 :(

documentation說以下內容:

也就是說,沒有什麼

編輯:如果任何人有同樣的問題:最後我用writeBundle()/readBundle()和推杆我的String[]納入Bundle

回答

9

這裏是一個工具從Android 4.1.2開始使用此方法:

public final void readStringArray(String[] val) { 
    int N = readInt(); 
    if (N == val.length) { 
     for (int i=0; i<N; i++) { 
      val[i] = readString(); 
     } 
    } else { 
     throw new RuntimeException("bad array lengths"); 
    } 
} 

因此它將值寫入給定的數組。並不返回任何內容

+0

謝謝!但...爲什麼他們不只是返回一個新的數組? – Maarten

+1

@Maarten不知道。可能正在創建新陣列的速度較慢。另外,我有源代碼中的readStringArray方法的第二個版本,它不接受任何參數並返回數組。但我沒有在doc中看到它,也無法使用。 –

+0

它適合你嗎?我認爲你應該接受@hunyadym的答案我試過了,它只是爲我工作。 – Amt87

43

使用createStringArray()而不是readStringArray(String[])。它會返回你需要的數組。

+2

@Maarten這是一個更好的**解決方案**,但是,* Nikita Beloglazov *的答案包含更好的**解釋**的問題。 –