2012-03-28 6 views
10

これまでのところ、Parcelableのオブジェクトは問題なく扱われてきました。その主な理由は、すべてのメンバが対応するメソッドがwriteX()であるためです。オブジェクトを小包に書く

public String name; 

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

しかし、今、私はBarメンバー物事が私のために少しdiceyを取得している場合:たとえば、私がやる

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

私は、これは間違った方法近づいているだろうか? writeToParcelの小包会員Barに何をすればよいですか?

答えて

25

正しい、より多くのOO方法は、バーがParcelableを実装することです。

プライベートFooのコンストラクタでバーを読み取るには:

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

・ホープ、このことができます:あなたのwriteToParcel方法でバーを書き込むには

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

+2

ここにいくつか混乱するかもしれないので、** getClass()。getClassLoader()**は** Bar.class.getClassLoader()** – Juni

+0

を追加します。クラスがSDKによって提供されていて、 ? – Eido95

0

看護師は痛みがあり、値渡しであり、参照ではありません。私は決してそれらを使用することをお勧めしません。アプリケーションの場合は静的モデルインスタンスを作成し、必要なオブジェクトへのshim参照を取得するだけです。

+0

賢者の言葉 –

+0

シングルトンを設計原則として使用することは、オブジェクト指向プログラミングに欠陥があります。 jsonにデシリアライズしたり、値を格納したり、他のすべてのクラスがアクセスできるグローバルクラスを持たないでください。 – HarshMarshmallow

関連する問題