X

Iniciar otra Actividad

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.

Respuesta del Botón Send

  1. En Android Studio, desde el directorio res/layout directory, edita el archivo activity_my.xml.
  2. En el elemento <Button>, añade el atributo android:onClick.
    <Button
        android: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.

  3. En el directorio java/com.mycompany.myfirstapp, abre el archivo MyActivity.java.
  4. Dentro de la clase MyActivity, añade el método sendMessage() como se muestra abajo:
    /** 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

  1. 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:
    public 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.

  2. En la parte superior del archivo, importa la clase Intent.
    import android.content.Intent;

    Consejo: En Android Studio, presiona Alt + enter (option + return en Mac) para importar las clases que falten.

  3. Dentro del método sendMessage(), utiliza findViewById() para buscar el elemento EditText.
    public void sendMessage(View view) {
      Intent intent = new Intent(this, DisplayMessageActivity.class);
      EditText editText = (EditText) findViewById(R.id.edit_message);
    }
  4. 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.
  5. Asigna el texto a una variable llamada message y utiliza el método putExtra() para añadir este texto a la intención.
    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);
    }

    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.

  6. En la parte superior de la clase MyActivity, añade la siguiente definición EXTRA_MESSAGE:
    public 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.

  7. En el método sendMessage() llama al botón Send del siguiente modo:
    /** 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.

  1. En Android Studio,. en el directorio java, selecciona el paquete, com.mycompany.myfirstapp, haz clic derecho y selecciona New > Blank Activity.
  2. 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
  3. Clic en Finish.
  4. 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.
  5. 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.

Figura 1. El nuevo asistente de actividad en Android Studio.

Crear la actividad sin Android Studio

Si estás utilizando un IDE diferente o la línea de comandos, sigue los siguientes pasos:

  1. Crea un nuevo archivo llamado DisplayMessageActivity.java en el directorio del proyecto src/ junto a archivo de la primera actividad MyActivity.java.
  2. Añade el siguiente código al archivo:
    public class DisplayMessageActivity extends AppCompatActivity{
    
        @Override
        protected 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();
            }
        }
    
        @Override
        public 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() { }
    
            @Override
            public 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.

  3. Añade el título de tu actividad a tu archivo string.xml:
    <resources>
        ...
        <string name="title_activity_display_message">My Message</string>
    </resources>
  4. En tu archivo manifest, AndroidManifest.xml, dentro de el elemento Application, añade el elemento <Activity> para tu clase DisplayMessageActivity:
    <application ... >
        ...
        <activity
            android:name="com.mycompany.myfirstapp.DisplayMessageActivity"
            android:label="@string/title_activity_display_message"
            android:parentActivityName="com.mycompany.myfirstapp.MyActivity" >
            <meta-data
                android: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.

  1. En el directorio java/com.mycompany.myfirstapp, edita el archivo DisplayMessageActivity.java.
  2. En el método onCreate(), elimina la siguiente línea:
    setContentView(R.layout.activity_display_message);
  3. Recupera la intención y después dale su valor a una variable.
    Intent intent = getIntent();
  4. 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.
  5. Extrae el mensaje enviado por MyActivity con el método getStringExtra().
    String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

Mostrar el Mensaje

  1. En el método onCreate(), crea un objeto TextView.
    TextView textView = new TextView(this);
  2. Cambia el tamaño del texto y el mensaje mediante el método setText().
    textView.setTextSize(40);
    textView.setText(message);
  3. Añade el TextView a la vista raiz del layout de tu actividad mediante el método setContentView().
    setContentView(textView);
  4. 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:

@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.

Figura 2. Ambas actividades en la app finalizada, ejecutándose en Android 5 Lollipop.

¡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í.

Los comentarios de Disqus están cargando....