Diferencia entre revisiones de «Usuario:ManuelRomero/Intents»

De WikiEducator
Saltar a: navegación, buscar
(El fichero java)
Línea 153: Línea 153:
 
     }
 
     }
 
</source>
 
</source>
 +
=Intents con parámetros=
 +
*Es muy  posible que queramos pasar/recuperar datos entre actividades
 +
*Por ejemplo que una activity me pase usuario y contraseña para validar
 +
===Devolviendo resultados===
 +
*Ahora queremos hacer un diseño como el siguiente
 +
[[Imagen:intent2.png]]
 +
#Realizamos los diseños
 +
fichero manifest con dos activity
 +
Dos ficheros java
 +
dos ficheros de layout

Revisión de 12:25 13 nov 2012



Intents

Referencia
http://developer.android.com/reference/android/content/Intent.html
  • Definición de la página oficial

Un intent es una descripción abstracta de una operación que va a llevar a cabo

  • Es una clase da android que permite instanciar nuevos objetos Activity.
  • Es decir nos permite especificar una Activity para que se ejecute
  • En Android una aplicacióno o componente no sólo es una Activity
  • En Android tenemos los siguientes componentes
  1. Activity como componenetes de UI
  2. Services
  3. Código ejecutándose en segundo plan o
  4. Broadcast receivers
  5. Broadcst messages código que responde a un mensaje de transmisión
  6. Proveedores de contenidos código que abstrae los datos

Intents para lanzar activity

  • Uso extremasamente sencillo
  • Realicemos un ejemplo sencillo
  • Idea: hacer un programa como se ve en la figura
  • Cada pantalla será un activity.
  • El click del activity 1 abrirá el activity 2
  • El click del activity 2 cerrará el activity 2 y volverá al activity 1

Intent1.png

Empezamos

  • Creamos un proyecto nuevo llamado p.e. usandoIntents
  • Clase ActividadPrimera.java
  • Layout 'actividad_primera.xml
    • Por supuesto los nombres son opciones
  • Creamos una clase nueva llamada ActividadSegunada.java

ClaseNueva.png

  • Al tener dos activity debemos indicarlo en el fichero Manifiest.xml
  • Añadimos la nueva clase activity
  • Vemos a continuación la parte del manifest con las clases
      <activity
            android:name=".ActividadPrimera"
            android:label="@string/title_activity_actividad_primera" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
      </activity>
      <activity
            android:name=".ActividadSegunda"
            android:label="@string/title_activity_actividad_segunda" >
            <intent-filter>
                <action android:name="com.example.objetosintents.ActividadSegunda" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
      </activity>
  • Nos debemos fijar en el elemento intent-filter
  • En este caso el elementos action tiene el nombre del filtro especificado al nombre de la clase', a diferencia del activity principal' que contenía el valor MAIN
    • De este modo otras actividades que quieran llamar a ésta lo harán por este nombre
  • El elemento category para el filtro contiene el valor DEFAULT el lugar del valor LAUNCHER
  • Esto indica que esta actividad será lanzada por defecto siendo invocada por otra mediante el método 'startActivity()' no desde el lanzador de aplicaciones del dispositivos

Los layouts

  • Creamos los dos layouts para cada activity
  • Cada uno contendrá una etiqueta de texto o label y un botón (por las especificaciones primeras
  • Los layouts les hemos llamado en este caso actividad_primera.xml y actividad_segunda.xml
actividad_primera.xml
<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" >
 
    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/actividad1"
        tools:context=".ActividadPrimera" />
 
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="41dp"
        android:onClick="activity1"
        android:text="Activar activity 2" />
 
</RelativeLayout>
actividad_segunda.xml
<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" >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/actividad2"
        tools:context=".ActividadSegunda" />
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="58dp"
        android:onClick="activity2"
        android:text="Cerrar actividad 2 y volver a 1" />
</RelativeLayout>
  • En el fichero string.xml tenemos las etiquetas usadas
  <string name="title_activity_actividad_primera">ActividadPrimera</string>
  <string name="title_activity_actividad_segunda">ActividadSegunda</string>
  <string name="actividad1">Esta es la actividad primera y principal</string>
  <string name="actividad2">Esta es la actividad segunda</string>

El fichero java

  • Ahora sólo queda lo que hacemos en el método del click
  • En la actividad primera tenemos el método activity1 (ver el fichero del layout de esta actividad)
 public void activity1(View v){
    	startActivity (new Intent("com.example.objetosintents.ActividadSegunda"));
    }
</java>
*La forma de iniciar una actividad es con el método '''''startActivity()''''
*como parámetro le pasamos una instancia de un objeto Intents con el nombre de la clase de la actividad como parámetro
*Se puede plantear más seccionado pero es lo mismo
<source lang=java>
   public void activity1(View v){
    	Intent claseAEjecutar = new Intent();
    	claseAEjecutar.setAction("com.example.objetosintents.ActividadSegunda");
    	startActivity (claseAEjecutar);
    }
  • Igualmente podemos especificar el nombre del la clase .class
  public void activity1(View v){
    	Intent claseAEjecutar = new Intent();
    	claseAEjecutar.setClass(this,  ActividadSegunda.class);
    	startActivity (claseAEjecutar);
    }
  • Y lo mismo de manera más compacta
 public void activity1(View v){
    	startActivity (new Intent(this,ActividadSegunda.class));
    }

Intents con parámetros

  • Es muy posible que queramos pasar/recuperar datos entre actividades
  • Por ejemplo que una activity me pase usuario y contraseña para validar

Devolviendo resultados

  • Ahora queremos hacer un diseño como el siguiente

Intent2.png

  1. Realizamos los diseños
fichero manifest con dos activity
Dos ficheros java
dos ficheros de layout