Подтвердить что ты не робот

Назначение описанияСодержание() Parcelable interface

Возможный дубликат:
Исправлено, когда /when описываетContents() используется?

Какова цель реализации функции describeContents() интерфейса Parcelable? Большая часть кода структуры возвращает 0 как реализацию. Документация говорит "битмаска, указывающая набор специальных типов объектов, упорядоченных Parcelable". Может кто-нибудь объяснить об этой функции (возможно, с примером)

4b9b3361

Ответ 1

Может случиться так, что ваш класс будет иметь дочерние классы, поэтому каждый из них в этом случае может возвращать в describeContent() разные значения, поэтому вы должны знать, какой конкретный тип объекта следует создать из Parcel. Например, например, пример реализации методов Parcelable в родительском классе (MyParent):

//************************************************
// Parcelable methods
//************************************************
//need to be overwritten in child classes 
//MyChild_1 - return 1 and MyChild_2 - return 2
public int describeContents() {return 0;}

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

public Parcelable.Creator<MyParent> CREATOR
        = new Parcelable.Creator<MyParent>()
{
    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];
    }
};

В этом случае не нужно реализовывать все методы Parcelable в дочерних классах - кроме describeContent()