sábado, 5 de julio de 2014

Comunicación entre actividades Android

Muchas veces cuando estamos realizando nuestra aplicación Android y tenemos varias actividades, es necesario que estas se comuniquen entre sí, es decir, necesitamos pasar información de una actividad a otra.
Para realizar esta comunicación, en la actividad origen tenemos que crear un objeto Intent y a este le añadimos las variables u objetos que queremos pasar a la actividad destino.

Intent intent = new Intent(MainActivity.this, ActividadDestino.class);
   intent.putExtra("nombre", “empezandoenesto”);   
   intent.putExtra("edad", 35);     
   startActivity(intent);

El código anterior como veis es muy simple e intuitivo.

En el constructor del objeto Intent simplemente le pasamos el contexto de la actividad origen MainActivity.this y la actividad que queremos lanzar ActividadDestino.class (fijaros que le pasamos el *.class)

Una vez que hemos creado el objeto Intent le añadimos o “ponemos” la información que queramos pasar a la actividad destino, para ello usamos el método de nuestro objeto Intent putExtra(nombre, valor);

Por último lanzamos el Intent con startActivity(intent);

Si esperamos una respuesta por parte de ActividadDestino en lugar de lanzar nuestro Intent con startActivity(intent) debemos hacerlo con startActivityForResult(intent, RESULT_CODE) donde el primer argumento es el Intent que queremos lanzar y el segundo es un número entero que lo identifica. Para el ejemplo anterior nos quedaría algo así.

Intent intent = new Intent(MainActivity.this, ActividadDestino.class);
   intent.putExtra("nombre", “empezandoenesto”);
   intent.putExtra("edad", 35);
   startActivityForResult(intent, 1234);

Para recuperar la información, en la actividad destino, es necesario crear un objeto Bundle, para ello recuperamos el Intent que lanzó la actividad con el método getIntent() y recuperamos el mapa el mapa de datos de la intención con getExtras()

Bundle extras = getIntent().getExtras();
   String s = extras.getString("nombre");
   int i = extras.getInt("edad")

En las siguientes líneas de código, se recuperan las variables de la intención utilizando uno de los métodos que nos ofrece la clase Bundle; dependiendo del tipo de la variable que vamos a recuperar utilizaremos un método u otro. Le pasaremos como argumento el nombre que le pusimos a la variable en la actividad lanzadora. En este caso se utilizan los métodos getString() getInt()

En el caso de que queramos devolver alguna información a la actividad origen tenemos que crear un nuevo Intent, pero esta vez la actividad

            Intent intent = new Intent();
         intent.putExtra("nombre", "empezandoenesto");
         setResult(RESULT_OK, intent);
         finish();

Para recuperar la información que nos devuelve la clase ActividadDestino en MainActivity tenemos que sobrescribir el siguiente método.

       @Override
       public void onActivityResult(int requestCode, int resultCode, Intent data){
         super.onActivityResult(requestCode, resultCode, data);
         if(requestCode == 1234 && resultCode == Activity.RESULT_OK){
            String nombre = data.getExtras().getString("nombre");
         }
      }

En la próxima entrada explicaré como se pasan objetos creados por nosotros entre actividades.


No hay comentarios:

Publicar un comentario