Comment étendre android classe qui implémente l'interface Parcelable?
Tout d'abord je dois vérifier cette réponse.
Ce que je suis en train de faire est d'étendre Location
classe de l'appeler LocationPlus
qui a certains
les variables membres. la fonctionnalité que je suis en train de réaliser est de passer de l'objet de LocationPlus
classe à partir d'une activité à l'autre.
Voici mon CREATOR
public static final Parcelable.Creator<LocationPlus> CREATOR = new Parcelable.Creator<LocationPlus>() {
@Override
public LocationPlus createFromParcel(Parcel source) {
return new LocationPlus(source);
}
@Override
public LocationPlus[] newArray(int size) {
return new LocationPlus[size];
}
};
problème, je suis confronté est cette erreur
Implicit super constructor Location() is undefined. Must explicitly invoke another constructor
lorsqu'il essaie d'écrire constructeur
public LocationPlus(Parcel in) {
Quelqu'un dans un commentaire me demander de publier LocationPlus classe donc, ici, il est
public class LocationPlus extends Location{
private int mBattery = -1;
public LocationPlus(String locationName) {
super(locationName);
}
public LocationPlus(Location location) {
super(location);
}
public int getmBattery() {
return mBattery;
}
public void setmBattery(int mBattery) {
this.mBattery = mBattery;
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<LocationPlus> CREATOR = new Parcelable.Creator<LocationPlus>() {
@Override
public LocationPlus createFromParcel(Parcel source) {
return new LocationPlus(source);
}
@Override
public LocationPlus[] newArray(int size) {
return new LocationPlus[size];
}
};
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeInt(mBattery);
}
public LocationPlus(Parcel in) {
mBattery =in.readInt();
}
}
Publier vos LocationPlus classe
code posté.
Juste pour être curieux, ce qui veut dire que si vous mettez un constructeur vide dans LocationPlus (essayez la fois vide et avec un super appel): public LocationPlus() { super() }. Je n'ai pas Java sur cette machine, alors malheureusement je ne peux pas l'essayer. Emplacement constructeur peuvent être protégés.
Malheureusement, le problème est que la classe parent n'a pas un constructeur vide
Ah.., qu'en est super( ce ) dans LocationPlus( Colis )?
code posté.
Juste pour être curieux, ce qui veut dire que si vous mettez un constructeur vide dans LocationPlus (essayez la fois vide et avec un super appel): public LocationPlus() { super() }. Je n'ai pas Java sur cette machine, alors malheureusement je ne peux pas l'essayer. Emplacement constructeur peuvent être protégés.
Malheureusement, le problème est que la classe parent n'a pas un constructeur vide
Ah.., qu'en est super( ce ) dans LocationPlus( Colis )?
OriginalL'auteur Akram | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
Parcelable, le Roi de Vitesse
Selon les ingénieurs google, ce code va s'exécuter beaucoup plus rapide. L'une des raisons pour cela est que nous sommes d'être explicite sur le processus de sérialisation au lieu d'utiliser la réflexion pour en déduire. Il va également de soi que le code a été largement optimisé pour cet usage.
De la classe enfant sera comme suit, avec l'utilisation de liste l'ajout dans les parcelable objet:
Un autre enfant classe :
De L'Activité:
Dans la réception d'activité:
OriginalL'auteur Min2
Salut, j'ai fais des recherches beaucoup à ce sujet, mais je ne pouvais pas trouver utile en quoi que ce soit. J'ai essayer la solution ci-dessous et il a travaillé pour moi.
Disons que votre super classe a seulement int variable nommée "mData".
}
Ensuite, votre classe a seulement int variable nommée "mBattery".
}
Jusqu'à présent, LocationPlus fonctionne très bien. Mais nous n'avons pas définir une variable de classe super. Tout d'abord, j'ai mis de la super classe de variables sur l'étendue de la classe avec super(..) de la méthode. Mais il ne fonctionne pas.
Au lieu de code ci-dessus, vous devez définir tous les super-classe de variables explicitement. Super classe les variables doivent être protégés. Final constructeur devrait ressembler à ceci:
et writeToParcel méthode devrait être comme ceci:
OriginalL'auteur farukcankaya
D'essayer cette solution:
OriginalL'auteur Hufnal
Selon les docs Android, il n'y a pas un
Location()
constructeur pour l'Emplacement de la classe. Lors de l'initialisation de votreLocationPlus
classe, vous devez l'appelersuper(String provider)
ousuper(Location l)
.Edit: Corrigé la syntaxe
(Voir Emplacement Android Doc)
Ce que vous devez faire est d'inclure un appel à une
super(String provider)
ousuper(Location l)
constructeur dans laLocationPlus(Parcel in)
méthode.OriginalL'auteur Brian