Android Katha : onActivityResult est obsolète. Maintenant quoi?
Bonjour et bienvenue sur mon blog,
Au cours de notre développement d’applications Android, nous avons utilisé startActivityForResult et onActivityResult beaucoup de méthodes pour les rappels d’activités. C’était vraiment clair et facile à mettre en œuvre. Mais Google sait.
Malheureusement, nous recevons maintenant un avertissement pour cette méthode dans notre code.
Alors la question est, et maintenant ?
Et la réponse est : ActivityResultLauncher.
Avantages:
- On peut maintenant lancer des activités pour le résultat à partir de fragments et recevoir les résultats par fragments sans passer par l’activité.
- Au lieu de distinguer les requêtes avec des codes INT faillibles, nous avons maintenant des classes fortement typées.
- Nous pouvons avoir des rappels séparés pour des demandes distinctes, éliminant ainsi le besoin de changer de cas dans la gestion des réponses.
onActivityResult(Kotlin):
fun openSecondActivityForResult() { val intent = Intent(this, SecondActivity::class.java) startActivityForResult(intent, REQUEST_CODE) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE) { // Do operations } }
ActivityResultLauncher (Kotlin):
fun openSecondActivityForResult() { val intent = Intent(this, SecondActivity::class.java) activityResultLauncher.launch(intent) } // We can do the assignment inside onAttach or onCreate var activityResultLauncher = registerForActivityResult(StartActivityForResult()) { result -> // There are no request codes if (result.resultCode == resultCode1 && result.data != null) { // Do operations } else if (result.resultCode == resultCode2) { // Do operations } }
— — — — — — — — Comment remplacer les appels existants— — — — — — — —
Étapes pour remplacer l’ancien par le nouveau (Kotlin):
- À la place de la méthode remplacée onActivityResult(…)utilisation
// We can do the assignment inside onAttach or onCreate var activityResultLauncher = registerForActivityResult(StartActivityForResult()) { result -> // There are no request codes if (result.resultCode == resultCode1 && result.data != null) { // Do operations } else if (result.resultCode == resultCode2) { // Do operations } }
2. Au lieu de startActivityForResult (intention, REQUEST_CODE)utilisation
val intent: Intent = Intent(this, SecondActivity::class.java)
activityResultLaunch.launch(intent)
3. Dans la classe SecondActivity.java, tout en revenant à l’activité source, le code restera le même comme –
val intent = Intent()
setResult(FirstActivity.resultCode1, intent)
finish()
Veuillez trouver le code complet avec quelques écrans de démonstration sur GitHub
Merci de votre visite, continuez à lire et continuez à vous améliorer 🙂
TROUVÉ CELA UTILE ? PARTAGEZ-LE
Source link