Saltar al contenido

Android: ¿cómo hacer que una actividad devuelva resultados a la actividad que la llama?

Solución:

Para iniciar 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 inició.

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

En la actividad puedes 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, nuevamente en la primera actividad, escribe el siguiente código en 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();
        }
    }
}

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();

Hazlos entrar onActivityResult como abajo:

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 quieres terminar y solo agrega un resultCode (sin datos), puedes llamar setResult(int resultCode) antes de finish().

Por ejemplo:

...
if (everything_OK) {
    setResult(Activity.RESULT_OK); // OK! (use whatever code you want)
    finish();
}
else {
   setResult(Activity.RESULT_CANCELED); // some error ...
   finish();
}
...

Luego, en su actividad de llamadas, marque el resultCode, para ver si estamos bien.

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

No olvide llamar a la actividad con startActivityForResult(intent, someCustomRequestCode).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.