¿Utilizar Parcel para clonar un objeto?

Tengo una clase que ha implementado Parcelable. ¿Puedo hacer algo como lo siguiente para crear una nueva instancia de una clase ?:

Foo foo = new Foo("a", "b", "c"); Parcel parcel = Parcel.obtain(); foo.writeToParcel(parcel, 0); Foo foo2 = Foo.CREATOR.createFromParcel(parcel); 

Me gustaría que foo2 fuera un clon de foo.

———————- actualización ————————— —-

Lo anterior no funciona (todos los miembros de Foo son nulos en la nueva instancia). Estoy pasando Foos entre las actividades muy bien, por lo que el interfaz Parcelable se implementa bien. Usando el siguiente que funciona:

 Foo foo1 = new Foo("a", "b", "c"); Parcel p1 = Parcel.obtain(); Parcel p2 = Parcel.obtain(); byte[] bytes = null; p1.writeValue(foo1); bytes = p1.marshall(); p2.unmarshall(bytes, 0, bytes.length); p2.setDataPosition(0); Foo foo2 = (Foo)p2.readValue(Foo.class.getClassLoader()); p1.recycle(); p2.recycle(); // foo2 is the same as foo1. 

Encontró esto de la siguiente q: ¿Cómo utilizar Parcel en Android?

Esto está funcionando bien, puedo ir con esto, pero es un código extra, no estoy seguro si hay una manera más corta de hacerlo (aparte de la correcta implementación de un constructor de copia …).

Gracias

Hay un camino más corto:

 Foo foo1 = new Foo("a", "b", "c"); Parcel p = Parcel.obtain(); p.writeValue(foo1); p.setDataPosition(0); Foo foo2 = (Foo)p.readValue(Foo.class.getClassLoader()); p.recycle(); 

Tuve el mismo problema y aquí está mi solución:

 Parcel p = Parcel.obtain(); foo.writeToParcel(p, 0); p.setDataPosition(0); // <-- this is the key Foo foo2 = Foo.CREATOR.createFromParcel(p); p.recycle(); 

Sí, suponiendo que su implementación de parcelas correctamente escribe y lee todas las variables en Foo, que debe crear un clon.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.