2012-03-28 12 views
10

Finora ho eseguito il chugging con gli oggetti Parcelable senza problemi, principalmente perché tutti i loro membri sono stati tipi con i metodi writeX() associati. Per esempio, io faccio:Scrittura di membri di oggetti su pacchi

public String name; 

private Foo(final Parcel in) { 
    name = in.readString(); } 
public void writeToParcel(final Parcel dest, final int flags) { 
    dest.writeString(name); } 

Ma ora se ho un Bar cose membri fanno un po 'rischiosa per me:

public Bar bar; 

private Foo(final Parcel in) { 
    bar = new Bar(); //or i could actually write some constructor for Bar, this is a demo. 
    bar.memberString = in.readString(); 
} 

public void writeToParcel(final Parcel dest, final int flags) { 
    // What do I do here? 
} 

Sto avvicinando nel modo sbagliato? Cosa devo fare nel mio writeToParcel membro del pacco Bar s?

risposta

25

Il modo corretto e più OO è rendere Bar implementa anche Parcelable.

Per leggere Bar nel costruttore privato Foo:

private Foo(final Parcel in) { 
    ... ... 
    bar = in.readParcelable(getClass().getClassLoader()); 
    ... ... 
} 

Per scrivere Bar nel metodo writeToParcel:

public void writeToParcel(final Parcel dest, final int flags) { 
    ... ... 
    dest.writeParcelable(bar, flags); 
    ... ... 
} 

Spero che questo aiuti.

+2

aggiungendo perché alcuni potrebbero confondere qui ** getClass(). GetClassLoader() ** significa ** Bar.class.getClassLoader() ** – Juni

+0

Cosa devo fare se la mia classe viene fornita dall'SDK e non può essere modificata ? – Eido95

0

I parcheggi sono un dolore e passano solo per valore e non per riferimento. Non consiglierei mai di usarli. Crea un'istanza di modello statico se sei un'applicazione e ottieni semplicemente un riferimento a shim all'oggetto di cui hai bisogno.

+0

Parole da un uomo saggio –

+0

L'uso di singleton come principio di progettazione è errato nella programmazione orientata agli oggetti. Deserializzare in json o memorizzare i valori, non avere una classe globale a cui tutte le altre classi possano accedere. – HarshMarshmallow