Sobes.tech
Junior

Comment transmettre des données d'une activité à une autre dans Android?

sobes.tech IA

Réponse de l'IA

Les données peuvent être transmises en utilisant Intent:

  1. Dans l'Activity d'origine : Placez les données dans les Extras de l'Intent en utilisant des méthodes comme putExtra(String key, value).

    // Préparer l'Intent
    val intent = Intent(this, TargetActivity::class.java)
    // Ajouter des données
    intent.putExtra("myString", "Bonjour depuis la première Activity")
    intent.putExtra("myInt", 123)
    intent.putExtra("myBool", true)
    // On peut transmettre des objets qui implémentent Parcelable ou Serializable
    // intent.putExtra("myObject", myParcelableObject)
    
    // Démarrer la nouvelle Activity
    startActivity(intent)
    
  2. Dans l'Activity cible : Extraire les données des Extras de l'Intent reçu dans la méthode onCreate ou onNewIntent.

    // Dans onCreate() de l'Activity cible
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_target)
    
        // Obtenir l'Intent qui a lancé cette Activity
        val intent = intent
    
        // Extraire les données par clé
        val myString = intent.getStringExtra("myString")
        val myInt = intent.getIntExtra("myInt", 0) // Deuxième argument : valeur par défaut
        val myBool = intent.getBooleanExtra("myBool", false)
    
        // Traiter les données extraites
        println("Chaîne reçue : $myString")
        println("Nombre reçu : $myInt")
        println("Boolean reçu : $myBool")
    
        // Pour des objets Parcelable ou Serializable
        // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject")
    }
    

Autres méthodes de transmission de données, adaptées à des scénarios plus complexes ou à de gros volumes de données :

  • ViewModel partagé entre Fragments/Activities (via SharedViewModel): Pratique pour des données communes entre composants liés.
  • Bundle (dans les Extras de l'Intent): putExtra utilise en réalité un Bundle interne.
  • Variables statiques/singletons: À utiliser avec précaution, car elles peuvent entraîner des fuites de mémoire et des problèmes d'état.
  • Base de données/SharedPreferences: Pour un stockage ou une transmission persistante de données nécessitant une sauvegarde.
  • Event Bus (par exemple, EventBus, RxJava): Pour transmettre des événements ou des données entre composants de manière asynchrone.
  • File I/O: Enregistrement dans un fichier et lecture depuis celui-ci.