2012-03-28 22 views
10

Hasta ahora he estado navegando junto con Parcelable objetos sin problema, principalmente porque todos sus miembros han sido tipos que tienen writeX() métodos asociados a ellos. Por ejemplo, yo:Escribiendo objetos miembros en paquetes

public String name; 

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

Pero ahora si tengo una Bar cosas miembros se ponen un poco arriesgado para mí:

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? 
} 

estoy acercando a mal? ¿Qué debo hacer en mi writeToParcel para enviar el miembro al paquete Bar s?

Respuesta

25

La forma correcta y más OO es hacer que Bar implemente Parcelable también.

Para leer Bar en el constructor privado Foo:

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

Para escribir Bar en el método de writeToParcel:

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

Espero que esto ayude.

+2

añadiendo porque algunos pueden confundir aquí ** getClass(). GetClassLoader() ** significa ** Bar.class.getClassLoader() ** – Juni

+0

¿Qué debo hacer si el SDK proporciona mi clase y no puede modificarse? ? – Eido95

0

Los parcelas son un dolor y solo pasan de valor y no de referencia. Nunca recomendaría usarlos. Haz una instancia de modelo estático si tu aplicación y solo obtén una referencia rápida del objeto que necesitas.

+0

Palabras de un sabio –

+0

El uso de singleton como principio de diseño es defectuoso en la programación orientada a objetos. Deserialice en json o almacene los valores, no tenga una clase global a la que puedan acceder todas las otras clases. – HarshMarshmallow