Comment transmettre des données d'une Activity à une autre dans Android?
sobes.tech IA
Réponse de l'IA
Il existe plusieurs méthodes :
-
Extras d'Intent : La méthode la plus courante. Les données sont emballées dans un
Bundleet ajoutées à l'Intent.// Dans la première Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("clé", "valeur"); // Types primitifs intent.putExtra("objet", new MySerializableObject()); // Serializable startActivity(intent); // Dans la deuxième Activity Bundle extras = getIntent().getExtras(); if (extras != null) { String valeur = extras.getString("clé"); MySerializableObject objet = (MySerializableObject) extras.getSerializable("objet"); } -
Objets Parcelable : Similaire à
Serializable, mais plus performant pour les objets fréquemment transmis. Nécessite l'implémentation de l'interfaceParcelable.// Dans la première Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("objet_parcelable", new MyParcelableObject()); startActivity(intent); // Dans la deuxième Activity Intent intent = getIntent(); MyParcelableObject objetParcelable = intent.getParcelableExtra("objet_parcelable"); -
Shared Preferences : Convient pour transmettre de petites quantités de données qui doivent persister entre les lancements de l'application.
// Dans la première Activity SharedPreferences preferences = getSharedPreferences("mes_prefs", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("clé", "valeur"); editor.apply(); // ou commit() // Dans la deuxième Activity SharedPreferences preferences = getSharedPreferences("mes_prefs", MODE_PRIVATE); String valeur = preferences.getString("clé", null); // null par défaut -
Variables statiques : Non recommandé, car cela viole les principes de la POO et peut entraîner des fuites de mémoire. À utiliser avec précaution et uniquement pour des cas très simples.
// Dans une classe statique ou toute autre variable statique accessible public static String dataStatique; // Dans la première Activity StaticDataHolder.dataStatique = "données"; // Dans la deuxième Activity String données = StaticDataHolder.dataStatique; -
Base de données/Fichier : Pour de grands volumes de données ou des données nécessitant une persistance. Les données sont stockées dans une base de données (SQLite, Room) ou un fichier, et la deuxième Activity les lit.
-
ViewModel (avec LiveData) : Dans le contexte des composants architecturaux, ViewModel est la méthode privilégiée pour gérer les données et la logique liée à l'UI. Les données entre Activities sont transmises via un ViewModel partagé ou par des événements sur LiveData.
// Dans la première Activity (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("clé_données", "valeur_donnée") } startActivity(intent) // Dans la deuxième Activity (Kotlin) val donnée = intent.getStringExtra("clé_données")
Le choix de la méthode dépend du type et du volume de données à transmettre, ainsi que des exigences de persistance. La transmission de données via Extras d'Intent est la norme pour de petits volumes de données et lors de transitions directes entre Activities.