90 votes

Dans StartActivityForResult, comment obtenir requestCode de l'enfant


J'ai Quatre-dire A, B, C et D
Ma situation est Un démarre l'activité B par startActivityForResult.

startActivityForResult(new Intent(this,B.class),ONE);

Dans d'autres situations, je vais B avec d'autres situation. comme

 startActivityForResult(new Intent(this,B.class),TWO);

En B j'ai besoin de vérifier, je dois appeler C ou D selon requestCode. I. e si UN besoin pour commencer C autre D J'ai donc besoin de savoir qui il faut vérifier le requestCode de l'enfant à l'Activité (B )
Ou en d'autres termes je veux obtenir avec ce que demande le code a B a commencé dans l'Activité B
Merci d'avance

144voto

Labeeb P Points 12645

Vous pouvez transmettre le code de demande en mettant extra.

 intent.putExtra("requestCode", requestCode);   
 

Ou si vous avez utilisé startActivityForResult plusieurs fois, alors mieux que de les éditer, vous pouvez override les startActivityForResult dans votre Activity , ajoutez-vous code il comme ça

 @Override
    public void startActivityForResult(Intent intent, int requestCode) {
        intent.putExtra("requestCode", requestCode);
        super.startActivityForResult(intent, requestCode);
    }
 

Il n'est donc pas nécessaire de modifier tous vos startActivityForResult
J'espère que ça vous a aidé

29voto

Szabolcs Berecz Points 1620

Le code de la demande n'est pas transmise à l'activité automatiquement car il n'a pas (et ne devrait pas) besoin de connaître cette valeur. Il a seulement besoin de savoir quoi faire et ne pas où il a commencé à partir.

Le démarrage d'une activité est vraiment juste une autre forme de l'appel d'une méthode. Lorsque vous appelez une méthode, vous recevez le résultat de façon synchrone (là où vous en avez fait l'appel). Dans ce cas, vous êtes seulement de passage dans l'information que la méthode a besoin pour faire son travail. Vous n'êtes pas dire où vous l'avez appelé.

Le démarrage d'une activité est asynchrone analogique de l'appel d'une méthode, dans ce cas, vous recevez le résultat de la méthode onActivityResult(). Dans cette méthode, vous avez besoin de savoir quoi faire avec le résultat que vous venez reçu et que vous avez le code de la demande pour cela.

Pour le rendre un peu plus clair pourquoi il n'est pas une bonne idée de passer le code de la demande en tant que paramètre, prenons l'exemple d'une activité qui est montrant un produit que vous pouvez acheter. Sur cette activité, il y a deux boutons "Acheter" et "Login" (comme vous l'êtes actuellement pas connecté). En appuyant sur "Login" va démarrer une activité nommée "Login", qui va essayer de connecter l'utilisateur à l'aide de l'information fournie. En appuyant sur "Acheter" en premier même "Login" de l'activité et si la connexion a réussi, commencer à acheter de l'activité.

Maintenant, le bouton "Connexion" utilise le code de la demande 1 pour démarrer l'activité de connexion, mais le bouton "Acheter" ne peut pas utiliser le même code de la demande qu'il aura à faire quelque chose de différent si la connexion est réussie. Ainsi, le bouton "Acheter" utilise le code de la demande 2.

Dans "Login" activité, vous pourriez recevoir deux demande de codes selon l'endroit où il a été appelé, mais vous aurez besoin de faire la même procédure.

Donc, si vous passez dans le code de la demande en tant que paramètre, vous allez vous retrouver avec du code qui doit faire la même chose pour un couple de différentes demande des codes, comme:

if (requestCode == LOGIN || requestCode == BUY) {
    // ...
} else ...

Vous vous trouverez également à la fin avec le stockage de la demande de code constantes dans un emplacement central, par exemple, une classe nommée RequestCodes.

En bref, le code de la demande ne doit être utilisé pour décider quoi faire avec ce résultat. De cette façon, vous allez vous retrouver avec un plus modulaire, plus facile à maintenir et plus facile à étendre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X