Ecrire enum avec String pour parcelle

J'avais énormément énuméré comme ceci:

public enum Option implements Parcelable { DATA_BASE, TRIPS, BIG_PHOTOS, OLD_PHOTOS, FILTERS_IMAGES, CATEGORIES_IMAGES, PAGES, SOUNDS, PUBLIC_TRANSPORT, MAPS; public static final Parcelable.Creator<Option> CREATOR = new Parcelable.Creator<Option>() { public Option createFromParcel(Parcel in) { return Option.values()[in.readInt()]; } public Option[] newArray(int size) { return new Option[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(ordinal()); } } 

Maintenant, je l'ai modifié et ça ressemble à:

  • Associations par programme avec un périphérique BLE sur Android 4.4+
  • Java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE
  • Cryptage personnalisé des appels GSM
  • Cordova PhoneGap mise à niveau vers 5.1.1 à partir de 2.2.0
  • Comment lancer le service FCM ID après une activité particulière déclenchée?
  • Vue personnalisée d'Android ActionBar ne remplissant pas parent
  •   public enum Option implements Parcelable { DATA_BASE("Database"), TRIPS("Trips"), BIG_PHOTOS("BigPhotos"), OLD_PHOTOS("OldPhotos"), FILTERS_IMAGES("FiltersImages"), CATEGORIES_IMAGES("CategoriesImages"), PAGES("Pages"), SOUNDS("Sounds"), PUBLIC_TRANSPORT("PublicTransport"), MAPS("Maps"); private String option; Option(String option){ this.option = option; } public String getName(){ return option; } public static final Parcelable.Creator<Option> CREATOR = new Parcelable.Creator<Option>() { public Option createFromParcel(Parcel in) { //... } public Option[] newArray(int size) { //... } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { //... } } 

    Comment puis-je implémenter writeToParcel (), createFromParcel () et newArray () int this Enum? J'ai besoin de cela pour réussir dans l'intention.

  • Puis-je supprimer un fragment défini dans un fichier layout.xml?
  • Améliorer la douceur du défilement dans une liste Android
  • L'Android réact-native ignore navigator.geolocation.getCurrentPosition
  • Démarrage de system.img sur un périphérique
  • Demande de mauvaises positions jusqu'à l'ouverture de la demande Google Map intégrée
  • Approche Android pour "Rate my application"
  • 4 Solutions collect form web for “Ecrire enum avec String pour parcelle”

    C'est une question ancienne, mais il y a une meilleure solution:

     dest.writeString(myEnumOption.name()); 

    et

     myEnumOption= MyEnum.valueOf(in.readString()); 

    Je l'ai résolu par:

     public enum Option implements Parcelable { DATA_BASE("Database"), TRIPS("Trips"), BIG_PHOTOS("BigPhotos"), OLD_PHOTOS("OldPhotos"), FILTERS_IMAGES("FiltersImages"), CATEGORIES_IMAGES("CategoriesImages"), PAGES("Pages"), SOUNDS("Sounds"), PUBLIC_TRANSPORT("PublicTransport"), MAPS("Maps"); private String option; Option(String option){ this.option = option; } public String getName(){ return option; } private void setOption(String option){ this.option = option; } public static final Parcelable.Creator<Option> CREATOR = new Parcelable.Creator<Option>() { public Option createFromParcel(Parcel in) { Option option = Option.values()[in.readInt()]; option.setOption(in.readString()); return option; } public Option[] newArray(int size) { return new Option[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(ordinal()); out.writeString(option); } } 

    Si la seule raison pour laquelle vous faites votre énumération Parcelable est de la transmettre dans une Intent , vous n'avez pas besoin de cela. Les énoncés sont Serializable , afin que vous puissiez passer comme:

     intent.putExtra("EnumValue", Option.DATA_BASE); 

    Et récupérez-le en utilisant:

     Option myEnum = (Option) intent.getSerializableExtra("EnumValue"); 

    Il peut être en retard pour l'OP, mais cela peut aider les autres, alors je vais encore publier ceci.

    1. Comme on l'a mentionné précédemment, c'est une mauvaise pratique d'avoir un formateur à un membre d'enum. Si vous avez besoin de ce membre, rendez-le définitif (ce qui exclut la possibilité d'un créateur pour cela)

    2. Vous n'avez pas besoin d'enregistrer ce membre (dans votre cas, l'option String ') dans le colis et le restaurer sur les loisirs.

    Ma mise en œuvre serait la suivante

     public enum Option implements Parcelable { DATA_BASE("Database"), TRIPS("Trips"), BIG_PHOTOS("BigPhotos"), OLD_PHOTOS("OldPhotos"), FILTERS_IMAGES("FiltersImages"), CATEGORIES_IMAGES("CategoriesImages"), PAGES("Pages"), SOUNDS("Sounds"), PUBLIC_TRANSPORT("PublicTransport"), MAPS("Maps"); private final String option; Option(String option){ this.option = option; } public String getName() { return option; } public static final Parcelable.Creator<Option> CREATOR = new Parcelable.Creator<Option>() { public Option createFromParcel(Parcel in) { return values()[in.readInt()]; } public Option[] newArray(int size) { return new Option[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(ordinal()); } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.