post icon

Tutorial de Programación Android: Retornar valores entre Activities (startActivityForResult)

En una de las primeras entragas sobre éste tutorial veíamos como utilizar el Activity y pasar valores entre ellos, ahora veremos algo parecido pero al inverso, cómo retornar valores al Activity que invocó a otro.

Ésto es realmente útil cuando tenemos un Activity padre que invoca a otro Activity como “pantalla auxiliar” el cual cumple con una función especifica y la procesa, para retornar uno o más datos que utilizará su “padre” por así decirlo.

Si se fijan el código es bastante sencillo de implementarlo, y es muy parecido al articulo ya mencionado.

Supongamos que tenemos un botón que llama a otro Activity, lo tenemos que implementar de ésta manera:

Intent intent = new Intent(ActiviyPrincipal.this, ActivityAuxiliar.class);
startActivityForResult(intent, 0);

Si se fijan, lo que cambio fue que en vez de utilizar el método startActivity() lo cambiamos por startActivityForResult(). Luego en la clase del Activity invocado escribimos todo igual, y agregamos unas líneas en algún botón que se encargará de procesar nuestros datos.

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ActDevtroce extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.act_Test);

		Button btnTest = (Button) findViewById(R.id.btnTest);

		btnTest.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				try {
					// algún código que procese lo que querramos
					Intent resultData = new Intent();
					resultData.putExtra("Test", "Lo he aprendido en www.devtroce.com");
					setResult(Activity.RESULT_OK, resultData);
					finish();
				} catch (Exception e) {
					MensajeBox(e.getMessage());
				}
			}
		});
	}
}

Con ésto tendriamos lista la devolución lista, sólo queda capturar ése retorno en el Activity principal, sobrescribiendo el método que cumple con dicha función. Una vez recuperado dicho valor, pueden programarlo cómo más les parezca, en el caso de ejemplo sólo lo mostraremos como mensaje

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
	if (data != null) {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setMessage(data.getStringExtra("Web"))
				.setTitle("Error")
				.setCancelable(false)
				.setNeutralButton("Aceptar",
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int id) {
								dialog.cancel();
							}
						});
		AlertDialog alert = builder.create();
		alert.show();
	}
}

Quedaría así la app

Comentarios desde Facebook:

  1. avatar
    gian Mozilla Windows
    12 marzo 2014 at 22:41 #

    Excelente solucion , necesitaba solo refrescar mi activity cuando regresara funciona perfecto

  2. avatar
    hector GUATEMALA Google Chrome Linux
    4 junio 2013 at 21:10 #

    tutorial más incompleto -.-
    ni siquiera dicen porque el segundo parámetro, el entero, del método.

  3. avatar
    Cesar MEXICO Google Chrome Windows
    17 septiembre 2012 at 02:13 #

    hola que tal, estoy desarrollando una aplicación pero he tenido problemas con algo que deseo hacer ojala pudieran ayudarme, la cuestion es que tengo un Acivity donde lo unico que deseo es declarar valores numericos en varios EditText y posteriormente en otro Activity mediante un boton realizar un calculo utilizando los valores declarados en la otra actividadn hasta ahora lo que eh itentado no me resulta

Responder