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
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%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) writeToParcel()
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.
Tags und Links java android inheritance parcelable