Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider bf83ab31 rédigé par Arnaud LANOIX's avatar Arnaud LANOIX
Parcourir les fichiers

move registerLaunch(...)

parent 49ec6087
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -72,7 +72,17 @@ Et elles sont reçues dans `TargetActivity`:
### Retour de données dans l'activité principale
Si l'on souhaite que l'activité de départ recoive des données à la fermeture de la seconde activité, il faut démarrer un peu différement la seconde activité
Si l'on souhaite que l'activité de départ recoive des données à la fermeture de la seconde activité, il faut démarrer un peu différement la seconde activité : Deux solutions sont (encore) possible :
1. via `startActivityForResult(intent, FLAG_ACTIVITY)` (solution en cours d'abandon par Google)
2. via `register.launch(intentParam)`
#### Solution n°1 : `startActivityForResult(intent, FLAG_ACTIVITY)`
Lancer l'activité en lui indiquant qu'il y aura un retour de résultat :
startActivityForResult(intent, FLAG_ACTIVITY)
......@@ -87,6 +97,7 @@ Lorsqu'on voudra terminer la seconde activité et renvoyer des données à l'act
setResult(Activity.RESULT_OK, intent)
finish()
Dans l'activité principale, on surchargera la méthode `onActivityResult(...)` pour prendre en compte
les informations reçues depuis la seconde activité
......@@ -105,10 +116,35 @@ les informations reçues depuis la seconde activité
Le `requestCode` doit correspondre à la constante entière définie précédemment.
### En résumé
##### En résumé
![](img/intents.png)
#### Solution n°2 : `register.launch(intentParam)`
Vous avez constaté que la méthode `startActivityForResult(...)` est dépréciée ; cela veut dire
qu'il est déconseillé de continuer à utiliser cette méthode.
Une nouvelle façon d'obtenir un retour depuis une activité est proposée dans les dernières versions d'Android. Dans l'activité principal `FromActivity` :
val intentParam = Intent(FromActivity.this, TargetActivity::class.java)
val register = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) {
if (it.resultCode == Activity.RESULT_OK) {
if (it.data != null) {
decalage = it.data!!.getIntExtra("KEY_DECALAGE", 0)
affichageDecalage.text = decalage.toString()
}
}
}
...
register.launch(intentParam)
Le code fermant l'activité secondaire `TargetActivity` reste identique à la solution n°1
......@@ -167,30 +203,6 @@ Envoyez le texte chiffré lorsque l'on clique sur "Envoi" dans l'activité `resu
## Code déprécié `startActivityForResult(...)`
Vous allez peut-etre constaté que ma méthode `startActivityForResult(...)` est dépréciée ; cela veut dire
qu'il est déconseillé de continuer à utiliser cette méthode.
Une nouvelle façon d'obtenir un retour depuis une activité est proposée dans les dernières versions d'Android. Dans l'activité principal `FromActivity` :
val intentParam = Intent(FromActivity.this, TargetActivity::class.java)
val register = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) {
if (it.resultCode == Activity.RESULT_OK) {
if (it.data != null) {
decalage = it.data!!.getIntExtra("KEY_DECALAGE", 0)
affichageDecalage.text = decalage.toString()
}
}
}
...
register.launch(intentParam)
Le code fermant l'activité secondaire `TargetActivity` reste identique
## Exercice de synthèse
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter