69 votes

Objet de la méthode describeContents() de l'interface Parcelable

Possible Duplicate:
Parcelable où/quand est utilisée la fonction describeContents()?

Quel est le but de l'implémentation de la fonction describeContents() de l'interface Parcelable? La plupart du code de framework retourne 0 comme implémentation. La documentation dit "un masque indiquant l'ensemble des types d'objets spéciaux marshalisés par le Parcelable." Est-ce que quelqu'un pourrait expliquer cette fonction (probablement avec un exemple)?

10voto

barmaley Points 7307

Il se peut que votre classe ait des classes enfants, donc chacune des classes enfants dans ce cas peut renvoyer dans describeContent() des valeurs différentes, afin que vous sachiez quel type d'objet particulier créer à partir de Parcel. Par exemple, voici une implémentation des méthodes Parcelable dans la classe parent (MyParent) :

//************************************************
// Méthodes Parcelable
//************************************************
// doivent être surchargées dans les classes enfants
// MyChild_1 - renvoie 1 et MyChild_2 - renvoie 2
public int describeContents() {return 0;}

public void writeToParcel(Parcel out, int flags)
{
    out.writeInt(this.describeContents());
    out.writeSerializable(this);
}

public Parcelable.Creator CREATOR
        = new Parcelable.Creator()
{
    public MyParent createFromParcel(Parcel in)
    {
        int description=in.readInt();
        Serializable s=in.readSerializable();
        switch(description)
        {
            case 1:
                return (MyChild_1 )s;
            case 2:
                return (MyChild_2 )s;
            default:
                return (MyParent )s;
        }
    }

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

Dans ce cas, on n'a pas besoin d'implémenter toutes les méthodes Parcelable dans les classes enfants - sauf describeContent()

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