J'essaie de rendre mes objets parcellables. Cependant, j'ai des objets personnalisés et ces objets ont des ArrayList
attributs d'autres objets personnalisés que j'ai créés.
Quelle serait la meilleure façon de faire cela?
la source
J'essaie de rendre mes objets parcellables. Cependant, j'ai des objets personnalisés et ces objets ont des ArrayList
attributs d'autres objets personnalisés que j'ai créés.
Quelle serait la meilleure façon de faire cela?
Vous pouvez en trouver des exemples ici , ici (le code est pris ici) , et ici .
Vous pouvez créer une classe POJO pour cela, mais vous devez ajouter du code supplémentaire pour le faire Parcelable
. Jetez un oeil à la mise en œuvre.
public class Student implements Parcelable{
private String id;
private String name;
private String grade;
// Constructor
public Student(String id, String name, String grade){
this.id = id;
this.name = name;
this.grade = grade;
}
// Getter and setter methods
.........
.........
// Parcelling part
public Student(Parcel in){
String[] data = new String[3];
in.readStringArray(data);
// the order needs to be the same as in writeToParcel() method
this.id = data[0];
this.name = data[1];
this.grade = data[2];
}
@Оverride
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {this.id,
this.name,
this.grade});
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
Une fois que vous avez créé cette classe, vous pouvez facilement passer des objets de cette classe par le biais de Intent
celui-ci et récupérer cet objet dans l'activité cible.
intent.putExtra("student", new Student("1","Mike","6"));
Ici, l'étudiant est la clé dont vous auriez besoin pour décompresser les données du bundle.
Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");
Cet exemple affiche uniquement les String
types. Mais, vous pouvez répartir tout type de données que vous souhaitez. Essaye le.
EDIT: Un autre exemple , suggéré par Rukmal Dias .
writeToParcel
méthode est-il important?Voici un site Web pour créer une classe parcelable à partir de votre classe créée:
http://www.parcelabler.com/
la source
IntelliJ IDEA et Android Studio ont des plugins pour cela:
Ces plugins génèrent du code passe- partout Android Parcelable en fonction des champs de la classe.
la source
1. Importer
Android Parcelable code generator
2. Créez une classe
3. Générer> Parcelable à partir du menu
Terminé.
la source
File > Settings... > Plugins
et cliquez sur leBrowse repositories...
bouton.Comment? Avec annotations.
Vous annotez simplement un POJO avec une annotation spéciale et la bibliothèque fait le reste.
Avantages:
Les inconvénients:
Hrisey
Hrisey est basé sur Lombok . Classe parcelable avec Hrisey :
Maintenant, vous n'avez plus besoin d'implémenter de méthodes d'interface Parcelable. Hrisey générera tout le code requis pendant la phase de prétraitement.
Hrisey dans les dépendances de Gradle:
Voir ici pour les types pris en charge. Le
ArrayList
est parmi eux.Installez un plugin - Hrisey xor Lombok * - pour votre IDE et commencez à utiliser ses fonctionnalités incroyables!
* N'activez pas les plugins Hrisey et Lombok ensemble ou vous obtiendrez une erreur lors du lancement de l'IDE.
Colisier
Classe parcelable utilisant Parceler :
Pour utiliser le code généré, vous pouvez référencer la classe générée directement, ou via la
Parcels
classe utilitaire en utilisantPour déréférencer le
@Parcel
, appelez simplement la méthode deParcels
classe suivanteParceler dans les dépendances Gradle:
Recherchez dans README les types d'attributs pris en charge .
AutoParcel
AutoParcel est une AutoValue extension qui permet la génération de valeurs Parcelable.
Ajoutez simplement
implements Parcelable
à vos@AutoValue
modèles annotés:AutoParcel dans le fichier de construction Gradle:
PaperParcel
PaperParcel est un processeur d'annotation qui génère automatiquement du code passe-partout Parcelable de type sécurisé pour Kotlin et Java. PaperParcel prend en charge les classes de données Kotlin, AutoValue de Google via une extension AutoValue, ou tout simplement des objets de bean Java standard.
Exemple d'utilisation de documents .
Annotez votre classe de données avec
@PaperParcel
, implémentezPaperParcelable
et ajoutez une instance statique JVM,PaperParcelable.Creator
par exemple:Pour les utilisateurs de Kotlin, voir Utilisation de Kotlin ; Pour les utilisateurs d'AutoValue, voir Utilisation d'AutoValue .
ParcelableGenerator
ParcelableGenerator (README est écrit en chinois et je ne le comprends pas. Les contributions à cette réponse de développeurs anglophones sont les bienvenues)
Exemple d'utilisation de README .
Le plugin android-apt aide à travailler avec les processeurs d'annotation en combinaison avec Android Studio.
la source
J'ai trouvé le moyen le plus simple de créer une classe Parcelable
la source
C'est très simple, vous pouvez utiliser un plugin sur android studio pour créer des objets Parcelables.
la source
Vous pouvez maintenant utiliser la bibliothèque Parceler pour convertir vos classes personnalisées en parcelable. Annotez simplement votre classe POJO avec @Parcel . par exemple
vous pouvez créer un objet de la classe Example et passer par Parcels et l'envoyer en tant que bundle par intention. par exemple
Maintenant, pour obtenir un objet de classe personnalisé, utilisez simplement
la source
Le parcable Android a des choses uniques. Ceux-ci sont donnés ci-dessous:
Exemple: Pour faire une classe Parceble, il faut implémenter Parceble. Percable a 2 méthodes:
Supposons que vous ayez une classe Person et qu'elle ait 3 champs, firstName, lastName et age. Après avoir implémenté l'interface Parceble. cette interface est donnée ci-dessous:
Voici la
writeToParcel
méthode que nous écrivons / ajoutons des données sur le colis dans une commande. Après cela, nous devons ajouter un code ci-dessous pour lire les données du colis:Ici, la classe Person prend un colis et obtient les données dans un même ordre lors de l'écriture.
Maintenant, pendant l'intention
getExtra
et leputExtra
code est donné ci-dessous:Mettez en extra :
Obtenez Extra:
La classe Personne Complète est donnée ci - dessous :
la source
Créer une classe Parcelable sans plugin dans Android Studio
implémente Parcelable dans votre classe, puis placez le curseur sur "implémente Parcelable" et appuyez sur
Alt+Enter
et sélectionnezAdd Parcelable implementation
(voir image). c'est tout.la source
Mettre:
bundle.putSerializable("key",(Serializable) object);
Obtenir:
List<Object> obj = (List<Object>)((Serializable)bundle.getSerializable("key"));
la source
ClassCastException
si l'objet n'est pas implémentéSerializable
.