2012-12-27 11 views
16

Sto cercando di salvare lo stato nel mio Fragment tramite l'utilizzo di Parcelable.Qual è il parametro per Parcel.readStringArray()?

Questo ha portato al seguente codice quando voglio tornare l'array una stringa che ho salvato nel Parcelable:

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

Ora readStringArray ha bisogno di un parametro, un String[] ... Ma perché? Potrebbe solo dare le stringhe che ho memorizzato in esso. Non so a priori quanti ce ne fossero, quindi questo fa schifo. :(

Il documentation dice il seguente:

Cioè, niente

EDIT:. Se qualcuno ha lo stesso problema: ho finito per usare writeBundle()/readBundle() e mettendo il mionel Bundle.

risposta

9

Ecco un implementati su questo metodo da 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"); 
    } 
} 

Quindi scrive i valori su un determinato array. E non restituisce nulla.

+0

Grazie! Ma ... Perché non restituiscono solo un nuovo array? – Maarten

+1

@Maarten non lo so. Potrebbe essere la creazione di un nuovo array più lento. Inoltre ho la seconda versione del metodo 'readStringArray' in fonti che non accettano argomenti e restituisce array. Ma non lo vedo in doc e non posso usarlo. –

+0

Ha funzionato per te? Penso che dovresti accettare la risposta di @hunyadym che ho provato e che ha funzionato per me. – Amt87

43

Utilizzare createStringArray() anziché readStringArray(String[]). Restituirà l'array di cui hai bisogno.

+2

@ Maarten Questa è una soluzione ** molto migliore ** del problema, tuttavia, * La risposta di Nikita Beloglazov * contiene una spiegazione ** migliore ** del problema. –

Problemi correlati