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 à:

  • Obtenir un bouton positif dans DialogPreference
  • Android "gps requiert ACCESS_FINE_LOCATION" erreur, même si mon fichier manifeste contient cette
  • Définir dynamiquement la hauteur de ViewPager
  • GetWidth et getHeight renvoient un zéro
  • Comment masquer la barre d'état dans Android
  • Comment puis-je obtenir l'empreinte MD5 à partir du clavier de Java, non seulement SHA-1?
  •   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.

  • Comment développer le backend de Google App Engine à l'aide d'Android Studio
  • Impossible de démarrer le service - Nécessite le paramètre de sécurité ACCESS_MOCK_LOCATION
  • BLE sur Nexus 7 (ME370T) avec Android 4.4.2
  • Le curseur a toujours une largeur par défaut
  • Android Picasso auto tourne l'image
  • Android L'importation com.google ne peut pas être résolue
  • 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.