Tengo una clase que ha implementado Parcelable. ¿Puedo hacer algo como lo foo2 siguiente para crear una nueva instancia de una clase ?:¿Usando Parcel para clonar un objeto?
Foo foo = new Foo("a", "b", "c");
Parcel parcel = Parcel.obtain();
foo.writeToParcel(parcel, 0);
Foo foo2 = Foo.CREATOR.createFromParcel(parcel);
Me gustaría ser un clon de foo.
---------------------- actualización ----------------------- --------
Lo anterior no funciona (todos los miembros de Foo son nulos en una nueva instancia). Estoy pasando Foos entre actividades muy bien, por lo que la interfaz Parcelable se implementa correctamente. Mediante 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.
encontraron esta de la siguiente q: How to use Parcel in Android?
Esto está funcionando bien, puedo ir con esto, pero es código extra, no estoy seguro si hay un camino más corto para hacer (además de implementar correctamente un constructor de copia ...).
Gracias
Hmm sí que no, aunque - acabo de salir de un objeto, pero Foo todos sus miembros son nulos. Estoy pasando instancias de Foo entre actividades bien sin embargo. Utilicé un fragmento de otra Q que parece funcionar, actualizando la pregunta anterior. – user291701
Ah, lo siento, realmente no compruebo la validez del código, solo en concepto es posible. Sin embargo, un constructor de copias definitivamente sería más eficiente si lo haces mucho. –