Las activitys son el equivalente a las ventanas o formularios de cualquier lenguaje de programación en Windows, además tienen una ventaja frente a estos ya que un programa puede llamar a un determinado formulario de otra aplicación. Por poner un ejemplo claro cuando abrimos la aplicación de Facebook y pulsamos subir foto, la aplicación de Facebook llama al activity de la camara para realizar una nueva fotografía. Además podemos pasar diferentes parámetros a dicha Activity como si llamáramos a una función mas.
En esta entrega aprenderemos a crear nuestros propios activitys y llamar de uno al otro al pulsar un botón, una vez aprendido veremos como pasar un parámetro de un Activity a otro.
Si no has leído aún las entregas anteriores recordar que las tenéis a vuestra disposición:
- Programación en Android para torpes (I) – Configurar el SDK
- Programación en Android para torpes (II) – Hola mundo y estructura de proyectos
- Programación en Android para torpes (III) – Modificando los elementos de un Activity en tiempo de ejecución.
- Programación en Android para torpes (IV) – Asignar eventos a un elemento y recuperar el valor de un EditText
Abrir un nuevo Activity al pulsar un botón
Para empezar en nuestro activity principal (Nosotros le hemos llamado Juegoactivitys) crearemos un botón, con id btAbrirNuevoActivity que será el encargado de llamar a nuestra segundo Activity. Además crearemos una segunda actividad para ello pulsamos con el botón derecho sobre nuestro proyecto y vamos a Nuevo>Otras>Android Activity y seguimos el asistente, nosotros le hemos dando el nombre de SegundaActivity y le hemos puesto un TextView con id tvHolaMundo.
JugandoActivitys.java
public class JugandoActivitys extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_jugando_activitys); //Define el boton Button boton = (Button) findViewById(R.id.btAbrirNuevoActivity); //Asigna el evento onclick al boton boton.setOnClickListener(this); } public void onClick(View v) { //Define la actividad Intent i = new Intent(this, SegundaActivity.class); //Inicia la actividad startActivity(i); } }
Entonces al pulsar el botón se ejecutará la función onClick(), esta función primero declara in Intent.
Los Intent son objetos propios de Android, el concepto es bastante abstracto y la documentación oficial no lo deja claro del todo, pero para que que nos entendamos su única finalidad es poder relacionarse con los diferentes Activitys (abrirlos, cerrarlos, recuperarlos..), una vez lo hemos declarado con new Intent(this, nombre_de_la_clase) nos falta iniciar esta actividad, para ello hacemos uso de la función startActivity(intent); línea 20.
Enviar un parámetro de un activity a otro.
Ahora supongamos que queremos enviar ciertas variables al nuevo activity antes de llamarlo, por ejemplo supongamos que el primer activity pide el nombre del usuario a través de un campo de texto y el segundo debe mostrar ¡Hola Miguel!, siendo Miguel el nombre del usuario.
Lo primero es añadir un campo de texto al Acitivity principal, nosotros le pondremos la id “etNombre”. Posteriormente enviaremos los parametros con un elemento llamado Bundle y las funciones putString y getExtras, como de costumbre voy a poner un ejemplo y explicarlo.
public class JugandoActivitys extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_jugando_activitys); //Define el boton Button boton = (Button) findViewById(R.id.btAbrirNuevoActivity); //Asigna el evento onclick al boton boton.setOnClickListener(this); } public void onClick(View v) { //Define el campo de texto EditText campo_texto = (EditText)findViewById(R.id.etNombre); String nombre_usuario = campo_texto.getText().toString(); //Define el bundle Bundle parametros = new Bundle(); parametros.putString("nombre", nombre_usuario); //Define la actividad Intent i = new Intent(this, SegundaActivity.class); i.putExtras(parametros); //Inicia la actividad startActivity(i); } }
Lo primero es obtener el texto introducido por el usuario, para ello declaramos el campo de texto y guardamos el contenido en la variable nombre_usuario.
A continuación, en la línea 21 definimos el objeto Bundle en nuestro caso le daremos de nombre “parametros”, este objeto es básicamente un contenedor de parametros y en el deberemos meter todos los parametros que deseemos pasar, para añadir nuevos parámetros se hace de la siguiente forma parametros.putString(“NOMBRE_DEL_PARAMETRO”, VALOR_DEL_PARAMETRO); aparte de putString disponemos de las funciones .putInt, putFloat, etc. para cada tipo de variable.
Por último en la línea 27 asociamos estos parámetros a nuestro intent mediante la función .putExtras(bundle);
Recoger un parámetro desde un Activity
Ahora nos faltaría que SegundoActivity leyera el parámetro que hemos enviado y lo mostrara, para ello definiremos un nuevo objeto bundle que almacenará los diferentes parametros obtenidos.
SegundoActivity.java
public class SegundaActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_segunda); Bundle parametros = this.getIntent().getExtras(); //Definimos el contenedor de parametros String nombre = parametros.getString("nombre"); //Guardamos el parametro nombre en la variable nombre TextView campo_texto = (TextView) findViewById(R.id.tvHolaMundo); campo_texto.setText("¡Hola "+nombre+"!"); //Mostramos el texto } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_segunda, menu); return true; } }
En la línea 8 definimos el Bundle y le asignamos el valor con la función .getExtras();
Después obtenemos el valor del parámetro “nombre” y lo asignamos a la variable nombre.
Por último solo falta editar el TextView como vimos en la entrega número 3 del curso de programación para android.
Antes que nada quiero agradecerte y felicitarte por tus publicaciones, soy desarrollador de .Net y he decidido incursionar en este “nuevo mundo” para mí, ya que necesito implementar en tablets un sistema de pedidos que lo hice en su momento en el sistema Os Palm. Te molesto pidiendo un consejo sobre que tipo de bases de datos usar, tengo entendido que SQlite funciona bien y podría ser transportable (trabajo en Sql Server 2008), si puedes orientarme con algun link o ni hablar con un tutorial, te lo agradeceria. Saludos.
Hola, estoy trabajando con pasar datos de una activity hacia otra y he pasado varios parametro dentro de un array de string pero como puedo hacer para pasar un objecto cualquiera es decir un array de Contactos (donde Contactos es un Array de la class Contacto).
excelente me has salvado gracias!!!!!
Muchísimas gracias por tu aporte!
yo quiero hacer lo mismo pero pasando la seleccion de un radiobuttons a la otra activity :(