lunes, 18 de abril de 2016

LLamar a una Activity desde otra en Android

En este artículo vamos a ver cómo lanzar o ejecutar una segunda activity desde la principal, para ello he creado un proyecto llamado Activities similar a como lo hago en el videotutorial de hola mundo en android en el que creo una empty Activity, de esta forma nos añade menos código por defecto.

Androi logo dev
En resumen, lo que necesitamos en un objeto Intent, los Intents se utilizan para solicitar a un componente (Activities, Servicios, Content providers, broadcast receivers) una acción.

 Intent intent = new Intent(this, Second_Activity.class);
 startActivity(intent);

En el caso de querer pasar algún parámetro o dato a la segunda actividad:

Intent intent = new Intent(this, Second_Activity.class);
intent.putExtra("web", "codigoalonso.net");
startActivity(intent);

y para recibirlo:

String texto = getIntent().getExtras().getString("web");

Veamos un ejemplo un poco más en detalle:


Para ello creo haciendo click sobre el paquete principal de la app para desplegar el menú contextual, seleccionamos las opciones New -> Activity -> Empty Activity como muestro en la imagen:

New Activity Android Studio

A esta segunda actividad la llamaré Second_Activity y para el nombre del layout activity_second :


Aunque Android Studio lo hace automáticamente, cuando creamos una actividad, es necesario que esté declarada en el archivo AndroidManifest.xml mediante la etiqueta <activity> y el atributo obligatorio android:name define la clase java. Existen otros atributos como android:label o android:icon para definir un titulo e icono, la lista completa la podéis encontrar en la guía de la API de android.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.codigoalonso.activities">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Second_Activity"></activity>
    </application>

</manifest>

Una vez creada nuestra segunda ventana, voy a agregar un método que lance nuestra Second_Activity desde nuestra MainActivity:

MainActivity.java:

package net.codigoalonso.activities;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void btLanzarSecondActivity(View view) {
        Intent intent = new Intent(this, Second_Activity.class);
        startActivity(intent);
    }
}

Para que ejecutar nuestro método btLanzarSecondActivity voy a crear un botón sobrescribiendo el evento onClick por simplificar el ejemplo:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="net.codigoalonso.activities.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Lanzar Activity 2"
        android:id="@+id/button"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="175dp"
        android:onClick="btLanzarSecondActivity" />
</RelativeLayout>

Y no es necesario nada más, al pulsar sobre el botón se abrirá nuestra segunda Activity.

16 comentarios: