Comment puis-je passer un objet d'une activité à une autre sur Android?

Je dois pouvoir utiliser un objet dans plusieurs activités dans mon application, et il doit être le même objet. Quelle est la meilleure façon de procéder?

J'ai essayé de faire de l'objet "publique statique" afin qu'il puisse être consulté par d'autres activités, mais pour une raison quelconque, cela ne consiste pas à la découper. Existe-t-il une autre façon de le faire?

  • Comment déplacer l'activité Bluetooth dans un service
  • Comment puis-je empêcher la barre d'état et la barre de navigation d'animer pendant une transition d'animation de scène d'activité?
  • La méthode onActivityResult n'est pas appelée Android
  • Nouveau projet Android nommé d'après Main Activity au lieu du nom de l'application
  • Impossible de charger une bibliothèque partagée native avec des dépendances dans une application d'activité native
  • Comment configurer la vue de contenu de NativeActivity vers un composant créé en Java
  • 6 Solutions collect form web for “Comment puis-je passer un objet d'une activité à une autre sur Android?”

    Lorsque vous créez un objet d'intention, vous pouvez utiliser deux méthodes pour passer des objets entre deux activités.

    PutParcelable

    PutSialializable

    Vous pouvez faire en sorte que votre classe soit partagable ou sérieux . Ensuite, vous pouvez passer vos cours personnalisés à travers les activités. J'ai trouvé cela très utile.

    Voici un petit extrait de code que j'utilise

    CustomListing currentListing = new CustomListing(); Intent i = new Intent(); Bundle b = new Bundle(); b.putParcelable(Constants.CUSTOM_LISTING, currentListing); i.putExtras(b); i.setClass(this, SearchDetailsActivity.class); startActivity(i); 

    Et dans le code d'activité nouvellement lancé sera quelque chose comme ça …

     Bundle b = this.getIntent().getExtras(); if (b != null) mCurrentListing = b.getParcelable(Constants.CUSTOM_LISTING); 

    Vous pouvez créer une sous-classe d' Application et stocker votre objet partagé. L'objet Application doit exister pour la durée de vie de votre application tant qu'il existe un composant actif.

    De vos activités, vous pouvez accéder à l'objet de l'application via getApplication() .

    Cette réponse est spécifique aux situations où les objets à passer ont une structure de classe imbriquée. Avec la structure de classe imbriquée, le rendre partagable ou sérialisable est un peu fastidieux. Et le processus de sérialisation d'un objet n'est pas efficace sur Android . Considérons l'exemple ci-dessous,

     class Myclass { int a; class SubClass { int b; } } 

    Avec la bibliothèque GSON de Google, vous pouvez analyser directement un objet dans une chaîne formatée JSON et la convertir en format d'objet après l'utilisation. Par exemple,

     MyClass src = new MyClass(); Gson gS = new Gson(); String target = gS.toJson(src); // Converts the object to a JSON String 

    Maintenant, vous pouvez passer cette chaîne à travers les activités en tant que StringExtra avec l'intention de l'activité.

     Intent i = new Intent(FromActivity.this, ToActivity.class); i.putExtra("MyObjectAsString", target); 

    Ensuite, dans l'activité de réception, créez l'objet original à partir de la représentation de chaîne.

     String target = getIntent().getStringExtra("MyObjectAsString"); MyClass src = gS.fromJson(target, MyClass.class); // Converts the JSON String to an Object 

    Il maintient les classes d'origine propres et réutilisables. Au-dessus de tout, si ces objets de classe sont créés sur le Web comme des objets JSON, cette solution est très efficace et économise du temps.

    METTRE À JOUR


    Bien que la méthode expliquée ci-dessus fonctionne pour la plupart des situations, pour des raisons évidentes de performance, ne comptez pas sur le système combiné-extra d'Android pour passer les objets autour. Il existe un certain nombre de solutions qui rendent ce processus flexible et efficace, voici quelques-uns. Chacun a ses propres avantages et inconvénients.

    1. Eventbus
    2. Otto

    Cela dépend du type de données dont vous avez besoin. Si vous avez une sorte de pool de données qui doit persister à travers les Activity alors la réponse d'Erich est le chemin à parcourir. Si vous avez juste besoin de passer quelques objets d'une activité à l'autre, vous pouvez les mettre en œuvre Serializable et les passer dans les extras de l' Intent pour commencer la nouvelle Activity .

    Peut-être que c'est une réponse impopulaire, mais dans le passé, j'ai simplement utilisé une classe qui a une référence statique à l'objet que je souhaite persister à travers les activités. Alors,

     public class PersonHelper { public static Person person; } 

    J'ai essayé de basculer sur le chemin d'interface Parcelable, mais je me suis heurté à un certain nombre de problèmes et les frais généraux dans votre code m'étaient peu attrayants.

    Votre objet peut également implémenter l'interface Parcelable. Ensuite, vous pouvez utiliser la méthode Bundle.putParcelable() et passer votre objet entre les activités dans l'intention.

    L'application Photostream utilise cette approche et peut être utilisée comme référence.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.