Sobes.tech
Junior

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 :

  1. Extras d'Intent : La méthode la plus courante. Les données sont emballées dans un Bundle et 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");
    }
    
  2. Objets Parcelable : Similaire à Serializable, mais plus performant pour les objets fréquemment transmis. Nécessite l'implémentation de l'interface Parcelable.

    // 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");
    
  3. 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
    
  4. 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;
    
  5. 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.

  6. 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.