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.
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.
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");
}
}
}
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)
.