studio - manual de programacion android pdf
Android: cómo hacer que una actividad devuelva resultados a la actividad que lo llama? (3)
Para comenzar una actividad que debería devolver el resultado a la actividad de llamada, debe hacer algo como a continuación. Debe pasar el código de solicitud como se muestra a continuación para identificar que obtuvo el resultado de la actividad que comenzó.
startActivityForResult(new Intent(“YourFullyQualifiedClassName”),requestCode);
En la actividad puede hacer uso de setData()
para devolver el resultado.
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();
Entonces, de nuevo, en la primera actividad escribes el siguiente código en ActivityResult ()
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();
}
}
}
EDITAR basado en su comentario: si desea devolver tres cadenas, siga esto haciendo uso de pares clave / valor con intención en lugar de usar Uri.
Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();
Consíguelos en el resultado de actividad como a continuación:
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");
}
}
}
Tengo una actividad de Location
que se puede llamar desde muchas actividades, como Sign up
y Order
. En la actividad Location
, el usuario ingresa su ubicación, por lo que la Location
la actividad devolverá esta nueva ubicación a la actividad que lo llamó.
Por lo tanto, cuando la actividad de registro llama a la actividad de Location
, debe devolver los datos a la actividad de registro. En otra ocasión, la actividad de Order
hará lo mismo.
Nota
Sé que me dirás que debería publicar el código, pero no te pido que me des el código; Solo quiero algunos consejos, enlaces o buenos hilos.
Puedes llamar finish()
Me gusta esto
@Override
public void onBackPressed() {
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
}
Si desea finalizar y simplemente agregar un resultCode
(sin datos), puede llamar a setResult(int resultCode)
antes de finish()
.
Por ejemplo:
...
if (everything_OK) {
setResult(1); // OK!
finish();
}
else {
setResult(-1); // some error ...
finish();
}
...
Luego, en su actividad de llamadas, verifique el resultCode
para ver si estamos 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 :-(
}
}
}
No olvides llamar a la actividad con startActivityForResult(intent, someCustomRequestCode)
.