sábado, 18 de mayo de 2013

Como enviar parámetros de una Actividad a otra

Hace unos días veíamos como invocar a una actividad desde otra, en este tutorial vamos a ver como pasar parámetros desde la actividad origen a la destino, para por ejemplo indicar el identificador de una lista para enviárselo a una pantalla de detalle.

Por un lado cuando se invoque a la nueva actividad deberemos realizarlo de la siguiente manera:

       Intent intent = new Intent(this, MI_CLASE.class);
       intent.putExtra("nombre", "Droide Code");
       intent.putExtra("id", 10);
       intent.putExtra("activo", true); 

Como podemos ver lo único que tenemos que hacer es usar el método putExtra del intent para añadir la información que deseemos. El método está sobrecargado para poder añadir todo tipo de información (String, byte, int, long, boolean, etc)

En la Actividad destino podremos recuperar la información de la siguiente manera:

       Bundle extras = getIntent().getExtras();
       String s = extras.getString("nombre");
       int i = extras.getInt("id");
       boolean b = extras.getBoolean("activo");

Simplemente deberemos acceder al Intent con el método getIntent() y posteriormente al objeto Bundle que contiene los extras.


Devolver datos a la actividad origen

Otra posibilidad es devolver información desde la segunda actividad a la de origen cuando esta termine.

Para ello la invocación desde la actividad original deberemos hacerlo de la siguiente manera:

       startActivityForResult(intent, 1);
El segundo parámetro es opcional, e indica el requestCode o código de petición. Podremos enviar un código u otro para que la actividad destino se comporte de una manera determinada.

En la actividad origen tambien deberemos sobreescribir el método onActivityResult:


       @Override  
       protected void onActivityResult(int requestCode, int resultCode, Intent data){
             if (requestCode==1 && resultCode==RESULT_OK) {
                    //código a ejecutar...
             }
       }

Este método se ejecutará cuando la actividad destino finalice y recibirá el requestCode con el que se llamó y el resultado. De esta forma podremos realizar una u otra acción dependiendo del resultado obtenido.

Por último debemos incluir el siguiente código en la actividad destino para devolver el resultado que deseemos y finalizar la actividad:

       Intent intent = new Intent();
       setResult(RESULT_OK, intent);
       finish();

Deberemos instanciar un nuevo Intent y enviarlo junto con el resultado usando el método setResult(). Por último finalizaremos la actividad con finish()

Nota: en la intención que viaja desde la segunda actividad a la primera igualmente puede enviarse la información que deseemos usando el método putExtra.

No hay comentarios:

Publicar un comentario