Lancer une Activity et récupérer un résultat à la fermeture
💡 Sujet
Comment lancer une nouvelle Activity depuis une autre, et exécuter une fonction dans l’Activity de base lorsqu’on revient après la fermeture de la nouvelle Activity.
⚙️ Principe
- Lancer la nouvelle
Activitydepuis l’Activityprincipale. - Fermer la nouvelle
Activityavec unsetResult. - Intercepter le résultat dans
onActivityResult(ouregisterForActivityResulten API moderne). - Exécuter la fonction souhaitée dans l’
Activityde base.
✅ Exemple moderne avec ActivityResultLauncher
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var launcher: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialisation du launcher
launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data
// Appeler la fonction souhaitée
onReturnFromSecondActivity(data)
}
}
// Exemple de lancement de la deuxième Activity
findViewById<Button>(R.id.openButton).setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
launcher.launch(intent)
}
}
private fun onReturnFromSecondActivity(data: Intent?) {
// Logique à exécuter au retour
Log.d("MainActivity", "Returned from SecondActivity")
}
}SecondActivity.kt
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
findViewById<Button>(R.id.closeButton).setOnClickListener {
val resultIntent = Intent()
resultIntent.putExtra("message", "Hello from SecondActivity")
setResult(Activity.RESULT_OK, resultIntent)
finish() // Ferme cette activity et retourne à MainActivity
}
}
}🧩 Résumé
- ✅
registerForActivityResultremplaceonActivityResultpour un code plus moderne. - ✅
setResultpermet de renvoyer des données à l’Activityqui a lancé la nouvelleActivity. - ✅
finish()ferme la nouvelleActivityet déclenche le callback dans l’Activityde base.