Zu Oderiks Beitrag:
Sie können Ihre enum implementieren Parcelable, die ganz einfach für enums ist:
public enum MyEnum implements Parcelable { ... } Sie können dann Intent.putExtra(String, Parcelable) verwenden.
Wenn Sie eine MyEnum-Variable myEnum definieren und dann intent.putExtra("Parcelable1", myEnum) ausführen, erhalten Sie die Fehlermeldung "The method putExtra(String, Parcelable) is ambiguous for the type Intent". weil es auch eine Methode Intent.putExtra(String, Parcelable) gibt, und der ursprüngliche Typ 'Enum' selbst die Schnittstelle Serializable implementiert, so dass der Compiler nicht weiß, welche Methode er wählen soll (intent.putExtra(String, Parcelable/or Serializable)).
Schlagen Sie vor, die Schnittstelle Parcelable aus MyEnum zu entfernen und den Kerncode in die Parcelable-Implementierung der Wrap-Klasse zu verschieben, etwa so (Father2 ist ein Parcelable und enthält ein Enum-Feld):
public class Father2 implements Parcelable {
AnotherEnum mAnotherEnum;
int mField;
public Father2(AnotherEnum myEnum, int field) {
mAnotherEnum = myEnum;
mField = field;
}
private Father2(Parcel in) {
mField = in.readInt();
mAnotherEnum = AnotherEnum.values()[in.readInt()];
}
public static final Parcelable.Creator<Father2> CREATOR = new Parcelable.Creator<Father2>() {
public Father2 createFromParcel(Parcel in) {
return new Father2(in);
}
@Override
public Father2[] newArray(int size) {
return new Father2[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mField);
dest.writeInt(mAnotherEnum.ordinal());
}
}
dann können wir das tun:
AnotherEnum anotherEnum = AnotherEnum.Z;
intent.putExtra("Serializable2", AnotherEnum.X);
intent.putExtra("Parcelable2", new Father2(AnotherEnum.X, 7));