2012-03-28 5 views
10

Bis jetzt habe ich zusammen mit Parcelable Objekte ohne Problem tuckern, vor allem, weil alle ihre Mitglieder wurden Typen, die writeX() Methoden mit ihnen verbunden sind. Zum Beispiel habe ich zu tun:Schreiben von Objekten Mitglieder zu Paketen

public String name; 

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

Aber jetzt, wenn ich ein Bar Mitglied der Dinge ein wenig heikel für mich bekommen:

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

Bin ich näher dies der falsche Weg? Was soll ich in meinem writeToParcel Paketelement Bar s tun?

Antwort

25

Die korrekte und mehr OO-Methode ist, dass Bar auch Parcelable implementiert.

Bar in Ihrem privaten Foo-Konstruktor zu lesen:

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

Um Bar in Ihrer writeToParcel Methode zu schreiben:

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

Hoffnung, das hilft.

+2

hinzufügen, weil einige hier verwirrt werden können ** getClass(). GetClassLoader() ** bedeutet ** Bar.class.getClassLoader() ** – Juni

+0

Was soll ich tun, wenn meine Klasse vom SDK bereitgestellt wird und nicht geändert werden kann ? – Eido95

0

Parcables sind ein Schmerz und nur nach Wert und nicht Referenz. Ich würde niemals empfehlen, sie zu benutzen. Erstellen Sie eine statische Modellinstanz, wenn Sie eine Anwendung verwenden, und rufen Sie eine Shimreferenz für das gewünschte Objekt ab.

+0

Wörter von einem weisen Mann –

+0

Die Verwendung von Singletons als Entwurfsprinzip ist in der objektorientierten Programmierung fehlerhaft. In json deserialisieren oder die Werte speichern, haben Sie keine globale Klasse, auf die alle anderen Klassen zugreifen können. – HarshMarshmallow

Verwandte Themen