Parzellierbare Vererbung: abstrakte Klasse - Welcher SCHÖPFER?

8

Ich habe eine abstrakte Klasse A , die Parcelable implementiert.

Ich habe eine Klasse B und eine Klasse C , die beide A erweitern. Wie kann ich sie parzellierbar machen?

Natürlich könnte ich es verketten und ein CREATOR sowohl in A als auch in B wie in vielen Posts vorgeschlagen anbieten. Aber da ich andere Objekte habe, die die A-B-C -Klassen speichern und Parcelable selbst implementieren, scheint dieser Ansatz nicht zu funktionieren, denn wenn ich eine ArrayList von A übergeben möchte, müsste ich CREATOR in der getippten Liste verwenden von

%Vor%

Was offensichtlich keinen Sinn ergibt. Also, wie kann ich A Parcelable richtig machen?

Ie. Ich möchte diese Klasse Parcelable machen, damit ich auf A auf eine allgemeine Weise verweisen kann.

A)

%Vor%

B)

%Vor%

C)

%Vor%     
Paul Woitaschek 17.02.2015, 17:47
quelle

2 Antworten

11

Ich habe die parcelable Architektur von Vincent Mimoun-Prat aus diesem Post: Parcelable und Vererbung in Android und lief in die gleiche Art und Weise liste das Problem auf, einen unmöglichen abstrakten CREATOR angeben zu müssen.

Beim Suchen in Parcel's JavaDoc habe ich die Methode writeList (List val) , das intern writeValue (Object) Methode für jedes Objekt der Liste und Aufruf von writeToParcel() aus Unterklassen (B und C aus einer A-Liste). Um die Liste zu entfernen, verwenden Sie das entsprechende readList (List outVal, ClassLoader Loader) wo A ClassLoader übergeben werden muss oder ein android.os.BadParcelableException geworfen wird, zumindest in meinem Fall.

Die Klasse mit der Liste der A-Elemente sollte in etwa so aussehen:

%Vor%

Die Verwendung dieser Methoden ist möglicherweise etwas langsamer als readTypedList() und writeTypedList() , aber spezifische Daten von B- und C-Unterklassen sind ebenfalls "parzelliert" und nicht nur die Felder von A abstract superclass (Es wird unmöglich sein, abstrakt zu sein). Sie stellen die richtigen Instanzen von B und C wieder her.

    
Albert Llorens Mestre 07.09.2015 18:51
quelle
-2
%Vor%

B und C müssen auch Parcelable

implementieren     
user840754 17.02.2015 17:53
quelle