2016-06-08 6 views
3

Sagen wir, ich habe ein Produkt-Objekt, das eine Pricetag-Eigenschaft hat. Ich habe auch eine Liste von Geschäften, jede mit einer eigenen Liste von Produkten.Wenn ein parzellierbares Objekt eine Absicht durchläuft, wird es mit Verweisen auf das ursprüngliche Objekt aktualisiert?

Speziell Produkt p hat Preis $ 9,99, und ein Store s, die in der Store-Liste ist, hatte p in seiner Produktliste.

Ich habe dieses Geschäft Liste in einer Android-Aktivität, und ich übergebe Produkt p zu einer anderen Aktivität durch eine Absicht, und ändern Sie dann den Preis dieses Objekts in der neuen Aktivität. Wenn ich diese neue Aktivität abgeschlossen habe und zum alten zurückwechsle, werden die Änderungen an diesem Objekt in der Produktliste von Store s widergespiegelt?

+0

Die Antwort lautet Nein. Wenn Sie ein parzellierbares Objekt an eine neue Aktivität übergeben, ist die Referenz des Objekts anders als die alte. Wenn Sie ein neues Paket erhalten wollen, verwenden Sie 'startActivityResult()' und rufen Sie das updated Produktobjekt in 'onActivityResult()' auf. – Lawrance

Antwort

6

Nein, die Referenzen werden nicht beibehalten. Ein Paket ist:

Container für eine Nachricht (Daten und Objektreferenzen), die über einen IBinder gesendet werden kann. Ein Flurstück kann beide abgeflachten Daten enthalten, die auf der anderen Seite des IPC (unter Verwendung der verschiedenen Methoden zum Schreiben bestimmter Typen oder der allgemeinen Parcelable-Schnittstelle ) und Verweisen auf lebende IBinder Objekte, die daraus resultieren, nicht abgeflacht werden die andere Seite erhält einen Proxy IBinder , der mit dem ursprünglichen IBinder im Paket verbunden ist.

Wenn Sie ein parcelable betrachten, gibt es eine CREATOR. Dies erzeugt ein neues Objekt aus dem Parcel. Zum Beispiel:

public static final Creator<Employee> CREATOR = new Creator<Employee>() { 
    @Override 
    public Employee createFromParcel(Parcel in) { 
     return new Employee(in); 
    } 

    @Override 
    public Employee[] newArray(int size) { 
     return new Employee[size]; 
    } 
}; 

Also, wenn Sie alle Daten zurück von einer anderen Aktivität, verwenden startActivityForResult als Lawrance erwähnt.

Verwandte Themen