353 votes

Comment puis-je rendre mes objets personnalisés parcelables ?

J'essaie de rendre mes objets parcelables. Cependant, j'ai des objets personnalisés et ces objets ont des propriétés ArrayList des attributs d'autres objets personnalisés que j'ai fabriqués.

Quelle serait la meilleure façon de procéder ?

8voto

Créer une classe Parcelable sans plugin dans Android Studio

implements Parcelable dans votre classe, puis placez le curseur sur "implements Parcelable" et appuyez sur Alt+Enter et sélectionnez Add Parcelable implementation (voir image). C'est tout.

enter image description here

7voto

Rjz Satvara Points 1890

J'ai trouvé le moyen le plus simple de créer Classe des colis

enter image description here

1voto

C'est très simple, vous pouvez utiliser un plugin sur Android studio pour rendre les objets Parcelables.

public class Persona implements Parcelable {
String nombre;
int edad;
Date fechaNacimiento;

public Persona(String nombre, int edad, Date fechaNacimiento) {
    this.nombre = nombre;
    this.edad = edad;
    this.fechaNacimiento = fechaNacimiento;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(this.nombre);
    dest.writeInt(this.edad);
    dest.writeLong(fechaNacimiento != null ? fechaNacimiento.getTime() : -1);
}

protected Persona(Parcel in) {
    this.nombre = in.readString();
    this.edad = in.readInt();
    long tmpFechaNacimiento = in.readLong();
    this.fechaNacimiento = tmpFechaNacimiento == -1 ? null : new Date(tmpFechaNacimiento);
}

public static final Parcelable.Creator<Persona> CREATOR = new Parcelable.Creator<Persona>() {
    public Persona createFromParcel(Parcel source) {
        return new Persona(source);
    }

    public Persona[] newArray(int size) {
        return new Persona[size];
    }
};}

1voto

Deepak J Points 144

J'ai essayé d'utiliser Parcellable, mais j'ai manqué de temps, j'ai donc utilisé Gson comme ci-dessous. Peut-être que cela pourrait aider d'autres personnes...

PersonData personData;
BusinessData businessData;

Les deux objets ci-dessus sont des objets modèles. Je voulais qu'il soit transmis à MainActivity.class à partir de LoginActivity.class. Parcellable ne fonctionnait pas avec d'énormes modèles et aurait pris du temps pour faire des changements J'ai donc fait ceci,

startActivity(
    new Intent(LogInActivity.this, MainActivity.class)
    .putExtra("businessData", new Gson().toJson(businessData))
    .putExtra("personData", new Gson().toJson(personData))
);

Récupérer ces objets dans MainActivity.class

BusinessData businessData = new Gson().fromJson(getIntent().getStringExtra("businessData"), BusinessData.class);
PresonData personData = new Gson().fromJson(getIntent().getStringExtra("personData"), PersonData.class);

0voto

Shubham Shukla Points 697

Vous pouvez maintenant utiliser Parceler pour convertir n'importe quelle classe personnalisée en parcelable. Il suffit d'annoter votre classe POJO avec @Parcel . par exemple

    @Parcel
    public class Example {
    String name;
    int id;

    public Example() {}

    public Example(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getName() { return name; }

    public int getId() { return id; }
}

vous pouvez créer un objet de la classe Exemple et l'envelopper dans des colis et l'envoyer en tant que paquet par le biais de l'intention. par exemple

Bundle bundle = new Bundle();
bundle.putParcelable("example", Parcels.wrap(example));

Pour obtenir l'objet Custom Class, il suffit d'utiliser

Example example = Parcels.unwrap(getIntent().getParcelableExtra("example"));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X