Tras completar la lección anterior, tienes una app que muestra una actividad (una única pantalla) con un campo de texto y un botón. En esta lección, añadirás algo de código a tu actividad MyActivity para que puedas iniciar otra actividad cuando el usuario presione en el botón Send.
Contenidos
Respuesta del Botón Send
- En Android Studio, desde el directorio res/layout directory, edita el archivo activity_my.xml.
- En el elemento <Button>, añade el atributo
android:onClick.
0123456<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/button_send"android:onClick="sendMessage" />
El valor del atributo android:onclick, "sendMessage", es el nombre de un método dentro de tu actividad que el sistema utilizará cuando el usuario presione el botón. - En el directorio java/com.mycompany.myfirstapp, abre el archivo MyActivity.java.
- Dentro de la clase
MyActivity, añade el método
sendMessage() como se muestra abajo:
012345/** Called when the user clicks the Send button */public void sendMessage(View view) {// Do something in response to button}
Para que el sistema pueda encontrar este método, tiene que cumplir lo siguiente:- Ser público
- La instrucción return tiene que devolver un valor void.
- Tener una View como único parámetro (esta será la View que se presionará)
A continuación, completarás este método para que lea el contenido del campo de texto y lo envíe a otra actividad.
Crear una Intención
- En
MyActivity.java, dentro del método
sendMessage(), crea una Intención (Intent) para iniciar otra actividad que se llamará
DisplayMessageActivity con el siguiente código:
01234public void sendMessage(View view) {Intent intent = new Intent(this, DisplayMessageActivity.class);}Nota: La referencia DisplayMessageActivity mostrará un error si estás utilizando un IDE de la índole de Android Studio ya que la clase aún no ha sido creada. Ignora este error por ahora; la clase la crearás pronto.
Intenciones (Intents)
Un Intent es un objeto que proporciona una unión entre dos componentes que se encuentran separados, como dos actividades. El Intent representa la “intención de hacer algo” de una app”. Puedes utilizar intenciones para una gran variedad de tareas, pero la más habitual es iniciar otra actividad. Para más información, visita Intenciones y Filtro de Intenciones.
- En la parte superior del archivo, importa la clase
Intent.
012import android.content.Intent;Consejo: En Android Studio, presiona Alt + enter (option + return en Mac) para importar las clases que falten.
- Dentro del método
sendMessage(), utiliza
findViewById() para buscar el elemento
EditText.
012345public void sendMessage(View view) {Intent intent = new Intent(this, DisplayMessageActivity.class);EditText editText = (EditText) findViewById(R.id.edit_message);} - En la parte superior del archivo, importa la clase EditText. En Android Studio, presiona Alt + enter (option + return en Mac) para importar las clases que falten.
- Asigna el texto a una variable llamada
message y utiliza el método
putExtra() para añadir este texto a la intención.
01234567public void sendMessage(View view) {Intent intent = new Intent(this, DisplayMessageActivity.class);EditText editText = (EditText) findViewById(R.id.edit_message);String message = editText.getText().toString();intent.putExtra(EXTRA_MESSAGE, message);}
Un Intent puede transmitir pares de datos llamados extras. El método putExtra() añade al primer parámetro el nombre clave o al que haremos referencia, y el valor que queremos que tenga ese nombre clave se coloca en el segundo parámetro. - En la parte superior de la clase
MyActivity, añade la siguiente definición
EXTRA_MESSAGE:
012345public class MyActivity extends AppCompatActivity{public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE";...}
En la siguiente actividad, a la hora de consultar estos datos, debe definir una clave extra para la intención con una constante pública. También es una buena práctica definir las claves para los extras de las intenciones utilizando el nombre del paquete de la app. Así te aseguras que tu clave es única, en caso de que tu app interactúe con otras apps. - En el método
sendMessage() llama al botón
Send del siguiente modo:
0123456789/** Called when the user clicks the Send button */public void sendMessage(View view) {Intent intent = new Intent(this, DisplayMessageActivity.class);EditText editText = (EditText) findViewById(R.id.edit_message);String message = editText.getText().toString();intent.putExtra(EXTRA_MESSAGE, message);startActivity(intent);}
El sistema recibe esta llamada e inicia una instancia de la Activity especificada en el Intent. Ahora necesitas crear la clase DisplayMessageActivity para que funcione este método.
Crear una Segunda Actividad
Todas las subclases de Activity deben implementar el método onCreate(). Este método es el lugar donde la actividad recibirá la intención con el mensaje, para posteriormente mostrarlo. También, en el método onCreate() se debe definir el layout de la actividad mediante el método setContentView(). Aquí es donde se configura todos los componentes de la actividad.
Crear una nueva actividad usando Android Studio
Android Studio incluye el método onCreate() entre otros cuando creas una nueva actividad.
- En Android Studio,. en el directorio java, selecciona el paquete, com.mycompany.myfirstapp, haz clic derecho y selecciona New > Blank Activity.
- En la ventana Choose options, rellena los detalles de la actividad:
- Activity Name (Nombre de la actividad): DisplayMessageActivity
- Layout Name (Nombre del layout asociado a la actividad): activity_display_message
- Title (Título): My Message
- Hierarchical Parent (Padre jerárquico): com.mycompany.myfirstapp
- Package name (Nombre del paquete): com.mycompany.myfirstapp
- Clic en Finish.
- Abre el archivo DisplayMessageActivity.java. La clase ya incluye una implementación del método onCreate(). onOptionsItemSelected(), el cual se encarga del comportamiento de Atrás y Subir la Action Bar. Deja estos dos métodos como están por ahora.
- Elimina el método onCreateOptionsMenu(). No lo necesitarás para esta app.
Si estás desarrollando utilizando Android Studio, puedes ejecutar tu app ya, pero no ocurrirán demasiadas cosas. Presionar el botón Send inicia la segunda actividad, pero esta utiliza el layout por defecto que muestra “Hello world”. Pronto actualizarás la actividad para mostrar un TextView personalizado.
Crear la actividad sin Android Studio
Si estás utilizando un IDE diferente o la línea de comandos, sigue los siguientes pasos:
- Crea un nuevo archivo llamado DisplayMessageActivity.java en el directorio del proyecto src/ junto a archivo de la primera actividad MyActivity.java.
- Añade el siguiente código al archivo:
0123456789101112131415161718192021222324252627282930313233343536373839404142public class DisplayMessageActivity extends AppCompatActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_display_message);if (savedInstanceState == null) {getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();}}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}/*** A placeholder fragment containing a simple view.*/public static class PlaceholderFragment extends Fragment {public PlaceholderFragment() { }@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rootView = inflater.inflate(R.layout.fragment_display_message,container, false);return rootView;}}}Nota: Si estás utilizando un IDE diferente a Android Studio, tu proyecto no contiene el layout activity_display_message que requiere el método setContentView() anterior. Actualizarás esto más adelante para solucionarlo.
- Añade el título de tu actividad a tu archivo
string.xml:
012345<resources>...<string name="title_activity_display_message">My Message</string></resources> - En tu archivo manifest,
AndroidManifest.xml, dentro de el elemento
Application, añade el elemento
<Activity> para tu clase
DisplayMessageActivity:
0123456789101112<application ... >...<activityandroid:name="com.mycompany.myfirstapp.DisplayMessageActivity"android:label="@string/title_activity_display_message"android:parentActivityName="com.mycompany.myfirstapp.MyActivity" ><meta-dataandroid:name="android.support.PARENT_ACTIVITY"android:value="com.mycompany.myfirstapp.MyActivity" /></activity></application>
El atributo android:parentActivityName declara el nombre de la actividad padre de la segunda actividad dentro de la jerarquía de la app. El sistema utiliza este valor para implementar algunos comportamientos de navegación por defecto, como la Navegación Subir en Android 4.1 (API 16) o superior. Puedes proporcionar estos comportamientos de navegación para versiones anteriores de Android utilizando la Librería de Soporte (Support Library) gracias al elemento <meta-data> como se muestra en el código anterior.
Nota: Tu SDK Android debería tener incluido la última Librería de Soporte Android (Android Support Library), la cual instalaste en el paso Añadir Paquetes del SDK. Cuando utilices las plantillas de Android Studio, la librería de soporte se añade automáticamente a tu proyecto (puedes ver el archivo JAR bajo Android Dependencies (Dependencias de Android). Si no estás utilizando Android Studio, necesitas añadir manualmente esta librería a tu proyecto mediante la siguiente guía, Configurar la Librería de Soporte, después vuelve a esta lección.
Si estás utilizando un IDE diferente a Android, no te preocupes si tu app no compila aún. Pronto actualizarás la actividad para que muestre un TextView personalizado.
Recibir la Intención
Cada Activity es llamada por un Intent, independientemente de como el usuario haya navegado hasta ahí. Puedes recuperar el Intent que inició la actividad mediante el método getIntent() y recuperar los datos que contiene dicha intención.
- En el directorio java/com.mycompany.myfirstapp, edita el archivo DisplayMessageActivity.java.
- En el método
onCreate(), elimina la siguiente línea:
012setContentView(R.layout.activity_display_message); - Recupera la intención y después dale su valor a una variable.
012Intent intent = getIntent(); - En la parte superior del archivo, importa la clase Intent.En Android Studio, presiona Alt + Enter (option + return en Mac) para importar las clases que falten.
- Extrae el mensaje enviado por
MyActivity con el método
getStringExtra().
012String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);
Mostrar el Mensaje
- En el método
onCreate(), crea un objeto
TextView.
012TextView textView = new TextView(this); - Cambia el tamaño del texto y el mensaje mediante el método
setText().
0123textView.setTextSize(40);textView.setText(message); - Añade el
TextView a la vista raiz del layout de tu actividad mediante el método
setContentView().
012setContentView(textView); - En la parte superior del archivo, importa la clase TextView.En Android Studio, presiona Alt + Enter (options + return en Mac) para importar las clases que faltan.
El código completo para el método onCreate() para la actividad DisplayMessageActivity es el siguiente:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get the message from the intent Intent intent = getIntent(); String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE); // Create the text view TextView textView = new TextView(this); textView.setTextSize(40); textView.setText(message); // Set the text view as the activity layout setContentView(textView); } |
Ahora puedes ejecutar tu app. Cuando se abra, escribe un mensaje en el campo de texto, presiona Send, y el mensaje aparecerá en la segunda actividad.
¡Eso es todo, ya has completado tu primera app Android!
Para aprender más visita la siguiente clase.
Puedes ver más información sobre Iniciar otra Actividad en la página oficial de Google en inglés pulsando aquí.