Writing Objects members to Parcels
-
27-05-2021 - |
문제
So far I've been chugging along with Parcelable
objects without issue, mainly because all of their members have been types that have writeX()
methods associated with them. For example, I do:
public String name;
private Foo(final Parcel in) {
name = in.readString(); }
public void writeToParcel(final Parcel dest, final int flags) {
dest.writeString(name); }
But now if I have a Bar
member things get a little dicey for 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?
}
Am I approaching this the wrong way? What should I do in my writeToParcel
to parcel member Bar
s?
해결책
The correct and more OO way is make Bar implements Parcelable too.
To read Bar in your private Foo constructor:
private Foo(final Parcel in) {
... ...
bar = in.readParcelable(getClass().getClassLoader());
... ...
}
To write Bar in your writeToParcel method:
public void writeToParcel(final Parcel dest, final int flags) {
... ...
dest.writeParcelable(bar, flags);
... ...
}
Hope this helps.
다른 팁
Parceables are a pain and only pass by value and not reference. I would never recommend using them. Make a static model instance if you application and just get a shim reference to the object you need.
제휴하지 않습니다 StackOverflow