J'étudie l'interface Parcelable
et je rencontre des problèmes pour essayer de comprendre comment cela fonctionne. Sur internet, je ne trouve pas de réponses à certaines de mes questions:Explication à propos de l'interface parcelable
Je vous montrer ma classe:
public class Media implements IModel, Parcelable{
private Uri uri;
private long _ID;
private boolean isOnDb = false;
private boolean isSelected = false;
/*Getter and setter methods
........
*/
/*********************************** Parcelable **********************************/
public static final Parcelable.Creator CREATOR = new Parcelable.Creator<Media>(){
@Override
public Media createFromParcel(Parcel parcel) {
return new Media(parcel);
}
@Override
public Media[] newArray(int i) {
return new Media[i];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeParcelable(uri, 1);
parcel.writeLong(_ID);
parcel.writeByte((byte) (isOnDb ? 1 : 0));
parcel.writeByte((byte) (isSelected ? 1 : 0));
}
private Media (Parcel parcel){
uri = parcel.readParcelable(Uri.class.getClassLoader());
_ID = parcel.readLong();
isOnDb = parcel.readByte() != 0;
isSelected = parcel.readByte() != 0;
}
}
Question 1 Comme vous pouvez le voir, j'ai un constructeur avec seulement 2 champ Media(Uri uri, long _ID)
. Est-ce un problème si la méthode writeToParcel()
et le constructeur private Media (Parcel parcel)
menage 4 champs à l'intérieur de leur corps? Je veux dire ... les champs gérés par private Media (Parcel parcel)
et writeToParcel()
devraient refléter le nombre de champs passés à "l'autre" contructor?
Question 2 Comment gérer un champ Uri
? Est-ce correct comme je l'ai fait? P.S .: Je ne comprends pas pourquoi je ne peux pas écrire parcel.writeSerializable(Uri);
Je reçois une erreur de compilation même si Uri
classe implements Serializable
.
Nous vous remercions à l'avance
Merci l'homme :) – MDP