web-dev-qa-db-fra.com

Android: comment faire en sorte qu'une activité renvoie les résultats à l'activité qui l'appelle?

J'ai une activité Location qui peut être appelée à partir de nombreuses activités, telles que Sign up et Order. Dans l'activité Location, l'utilisateur entre son emplacement. L'activité Location renvoie alors ce nouvel emplacement à l'activité qui l'a appelée.

Alors quand le Sign up activité appelle l’activité Location, elle doit renvoyer les données à la fonction Sign up activité. Une autre fois, l'activité Order fera la même chose.

Remarque

Je sais que vous allez me dire que je devrais poster le code, mais je ne vous demande pas de me le donner; Je veux juste des astuces, des liens ou de bonnes discussions.

101
user user

Afin de démarrer une activité qui devrait renvoyer le résultat à l'activité d'appel, vous devez procéder comme ci-dessous. Vous devez transmettre le code de requête comme indiqué ci-dessous afin d'identifier que vous avez obtenu le résultat de l'activité que vous avez commencée.

startActivityForResult(new Intent(“YourFullyQualifiedClassName”),requestCode);

Dans l'activité, vous pouvez utiliser setData() pour renvoyer le résultat.

Intent data = new Intent();
String text = "Result to be returned...."
//---set the data to pass back---
data.setData(Uri.parse(text));
setResult(RESULT_OK, data);
//---close the activity---
finish();

Alors encore dans la première activité, vous écrivez le code ci-dessous dans onActivityResult ()

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String returnedResult = data.getData().toString();
            // OR
            // String returnedResult = data.getDataString();
        }
    }
}

EDIT en fonction de votre commentaire: Si vous voulez retourner trois chaînes, suivez ceci en utilisant des paires clé/valeur avec intention au lieu d'utiliser Uri.

Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();

Obtenez-les dans onActivityResult comme ci-dessous:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String street = data.getStringExtra("streetkey");
            String city = data.getStringExtra("citykey");
            String home = data.getStringExtra("homekey");
        }
    }
}
214
Kanth

Si vous voulez terminer et ajouter simplement un resultCode (sans données), vous pouvez appeler setResult(int resultCode) avant finish().

Par exemple:

...
if (everything_OK) {
    setResult(1); // OK!
    finish();
}
else {
   setResult(-1); // some error ...
   finish();
}
...

Ensuite, dans votre activité d’appel, vérifiez le resultCode pour voir si tout va bien.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == someCustomRequestCode) {
        if (resultCode == 1) {
            // OK!
        }
        else if (resultCode = -1) {
            // something went wrong :-(
        }
    }
}

N'oubliez pas d'appeler l'activité avec startActivityForResult(intent, someCustomRequestCode).

1
lenooh