Être capable de démarrer une activité d'une autre est très bien, mais nous aurons souvent besoin de savoir comment l'activité appelée s'est comportée dans sa tâche ou même quelle activité a été appelée. La méthode startActivityForResult () fournit la solution.

 

Se préparer
Retourner un résultat d'une activité n'est pas très différent de la façon dont nous venons d'appeler l'activité dans les recettes précédentes. Vous pouvez soit utiliser le projet de la recette précédente, soit lancer un nouveau projet et l'appeler GettingResults. De toute façon, une fois que vous avez un projet avec deux activités et le code nécessaire pour appeler la deuxième activité, vous êtes prêt à commencer.


Il y a seulement quelques changements nécessaires pour obtenir les résultats:
1. Tout d'abord, ouvrez MainActivity.java et ajoutez la constante suivante à la classe: public static final String REQUEST_RESULT = "REQUEST_RESULT";
2. Ensuite, changez la façon dont l'intention est appelée en modifiant le
Méthode onClickSwitchActivity () pour attendre un résultat:
public void onClickSwitchActivity (Voir la vue) {
EditText editText = (EditText) findViewById (R.id.editTextData);
String texte = editText.getText (). ToString ();
Intention intention = nouvelle intention (this, SecondActivity.class);
intention.putExtra (Intent.EXTRA_TEXT, texte);
startActivityForResult (intention, 1);
}
3. Ensuite, ajoutez cette nouvelle méthode pour recevoir le résultat:
@Passer outre
void protégé onActivityResult (int requestCode, int resultCode, données d'intention) {
super.onActivityResult (requestCode, resultCode, données); if (resultCode == RESULT_OK) {
Toast.makeText (this, Integer.toString (
data.getIntExtra (REQUEST_RESULT, 0)), Toast.LENGTH_LONG) .show ();
}
}
4. Enfin, modifiez onClickClose dans SecondActivity.java pour définir la valeur de retour comme suit:
public void onClickClose (Voir la vue) {
Intention returnIntent = new Intent ();
returnIntent.putExtra (MainActivity.REQUEST_RESULT, 42);
setResult (RESULT_OK, returnIntent);
terminer();
}

Comment ça marche...
Comme vous pouvez le voir, obtenir les résultats est relativement simple. Nous appelons simplement l'intention avec startActivityForResult, donc il sait que nous voulons un résultat. Nous configurons le gestionnaire de rappel onActivityResult () pour recevoir les résultats. Enfin, nous nous assurons que la seconde activité renvoie un résultat avec setResult () avant de fermer l'activité. Dans cet exemple, nous définissons simplement un résultat avec une valeur statique. Nous montrons simplement ce que nous recevons pour démontrer le concept.
{jUb
Il est recommandé de vérifier le code de résultat pour s'assurer que l'utilisateur n'a pas annulé l'action. C'est techniquement un entier, mais le système l'utilise comme une valeur booléenne. Vérifiez si RESULT_OK ou RESULT_CANCEL et procédez en conséquence. Dans notre exemple, la deuxième activité n'a pas de bouton d'annulation, alors pourquoi s'embêter à vérifier? Que faire si l'utilisateur appuie sur le bouton de retour? Le système définira le code de résultat à RESULT_CANCEL et l'intention de null, ce qui entraînera une exception.
Nous avons utilisé l'objet Toast, qui est un message contextuel pratique qui peut être utilisé pour notifier discrètement l'utilisateur. Il fonctionne également comme une méthode pratique pour le débogage car il n'a pas besoin d'une disposition spéciale ou d'un espace d'écran.

Il y a plus...
Outre le code de résultat, onActivityResults () inclut également un code de requête. Tu te demandes d'où ça vient? C'est simplement la valeur entière qui a été passée avec
appel startActivityForResult (), qui prend cette forme:
startActivityForResult (Intention intention, int requestCode);
Nous n'avons pas vérifié le code de la demande car nous savions que nous n'avions qu'un seul résultat à gérer, mais dans les applications triviales avec plusieurs activités, cette valeur peut être utilisée pour identifier l'origine de la requête.

Voir également
► Pour en savoir plus sur la création de nouvelles classes d'activités, reportez-vous à la recette Passer d'une activité à l'autre
► Pour plus d'informations sur Toasts, consultez la recette Making Toast au chapitre 7, Alertes et notifications