jueves, 28 de marzo de 2013

Android - Pasar datos desde una Activity a otra

Apollandonos en el ejemplo de ayer hoy simplemente he copiado el proyecto, le he cambiado el nombre mediante refactor, solucionado algunos errores que daba por referencias al antiguo nombre y editado un pelin las vistas; si os parece mas sencillo podeis crearos un nuevo proyecto para probar esto, o nuevas vistas y usarlas como vamos a ver, yo queria dejar esto en un proyecto aparte para que os podais descargar el codigo desde Git como viene siendo habitual y no dependais del otro proyecto, ni tengais que andar buscando un fragmento de codigo por todo el proyecto.

Bueno manos a la obra, como os he dicho he editado las vistas, en el caso de activity_main.xml he dejado solamente un boton enorme.
En su clase MainActivity.java he eliminado todo lo que hicimos ayer, y en la funcion de lanzar2ventana he dejado el siguiente codigo

    public void lanzar2ventana(View v) {
        Intent inten = new Intent(this, ventana2.class);
        inten.putExtra("usuario", "Ramon");
        inten.putExtra("edad", 25);
        startActivity(inten);
    }

En donde tan solo nos llaman la atencion estas lineas
        inten.putExtra("usuario", "Ramon");
        inten.putExtra("edad", 25);
dentro de la funcion la primera linea como ya sabemos declara una intencion, y en estas lineas añadimos un par de "extra" a esa intencion, esto debe hacerse por parejas, es decir ("nombre o referencia por lo que lo vamos a buscar" , "dato")
como vemos arriba pasamos un String y tambien un int; despues lanzamos la intencion

Por otro lado en ventana2.xml he creado 2 label uno con un texto fijo que pone nombre y otro que pone edad, debajo de cada uno tengo 1 EditText para cada dato

En ventana2.java este codigo:
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ventana2);
       
        Bundle extras = getIntent().getExtras();
        String nombre = extras.getString("usuario");
        int edad = extras.getInt("edad");
   
        EditText textNombre = (EditText) findViewById(R.id.TxtNombre);
        EditText textEdad = (EditText) findViewById(R.id.txtEdad);
       
        textNombre.setText(nombre);
        textEdad.setText(Integer.toString(edad));
    }

En el cual dentro de la funcion onCreate (fuera no funcionara) declaramos un Bundle al que le asignamos los valores de los extras que le hemos pasado desde el otro Activity, despues declaramos una variable del tipo String y mediante extras.getString("nombre del parametro que queremos recuperar") recuperamos el nombre del usuario; y hacemos lo propio con la edad, pero esta vez recuperandolo como un int.

Declaramos los 2 EditText (ya veis que funciona igual que con los botones)
y finalmente les asignamos los valores recuperados, a la edad le hacemos casting, ya que a un EditText no se le puede asignar un int debe ser un texto

En este punto ya podemos lanzar el proyecto y verlo funcionando ;)
Puedes descargarte todo el codigo o verlo desde aqui http://adf.ly/LkOgw