我有一個實現了Parcelable的類。我可以這樣做下面創建一個類?:的新實例使用包來克隆一個對象?
Foo foo = new Foo("a", "b", "c");
Parcel parcel = Parcel.obtain();
foo.writeToParcel(parcel, 0);
Foo foo2 = Foo.CREATOR.createFromParcel(parcel);
我想foo2的是富的克隆。
---------------------- update ----------------------- --------
上述不起作用(所有Foo成員在新實例中都爲null)。我在活動之間傳遞Foos很好,所以Parcelable接口實現正常。使用下面的其中工程:
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.
發現這個從下面問:How to use Parcel in Android?
這是工作好了,我可以用這個去,但它是額外的代碼,不知道是否有一個較短的方式做它(除了正確實現複製構造函數...)。
感謝
嗯是的它不會,但 - 我只是得到了一個Foo對象,但它的所有成員都是空的。雖然我在活動之間傳遞了Foo實例。我使用了另一個似乎可行的Q代碼片段,更新了上述問題。 – user291701 2010-09-22 20:43:29
啊,對不起,我沒有真正檢查代碼的有效性,只是在概念上它的possbile。但是,如果你做了很多工作,複製構造函數肯定會更有效率。 – 2010-09-22 20:59:23