juil
17
2010

[Tutoriel Android] Partie 2 – Intent et Listener

Mes premiers pas sous Android

Bonjour à tous et bienvenue pour un nouveau tutoriel sur la plateforme Android, nous allons débuter ce cours par un rapide récapitulatif des fonctions primordiales.

Tout d’abord, l’utilisation des listener qui seront utilisés pour définir les actions de nos éléments sur l’interface graphique, puis l’utilisation des intents.

Qu’est-ce qu’un Listener ?

Un listener en français se traduit par un écouteur, vous allez me dire : ouais c’est bien mais ça écoute quoi ? Un écouteur, comme son nom l’indique, écoute une source jusqu’à ce qu’elle soit utilisée.

Pour qu’une action soit réalisée, il faut qu’un émetteur envoie un signal dans le canal d’écoute pour que le listener se déclenche.

Action : Clique sur un bouton

Listener : Ecoute si le bouton est cliqué

Il n’y a pas plus simple que cela, nous verrons un peu plus bas dans les exemples comment mettre en application un listener.

Qu’est-ce qu’un Intent ?

Les intents sont l’une des pierres angulaires de la plateforme. Nous pouvons les comparer à des actions ou même à des intentions, ils permettent de dialoguer à travers le système à partir de canaux qui leurs sont dédiés. Quand votre mobile reçoit un appel, la plateforme lance un Intent signalant l’arrivée d’un appel, de même pour un sms. Nous les utiliserons dans nos applications pour dialoguer à l’intérieur de celle-ci (changement d’écran) ou avec le système (intercepter des sms et autres).

C’est un mécanisme complexe mais très efficace, je vous renvois à la documentation pour plus de renseignements (en Anglais).

http://developer.android.com/reference/android/content/Intent.html

Création de notre projet

Comme dans le tutoriel précédent, grâce à Eclipse et ADT, créez un nouveau projet. Nous allons commencer par éditer le fichier « main.xml » qui se situe dans le dossier « res/layout ».

Sa syntaxe actuelle est celle-ci :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

</LinearLayout>

Nous allons enlever le textview et le remplacer par un button pour voir le fonctionnement des listener.

Nous nous retrouvons alors avec la syntaxe suivante :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<Button

android:id="@+id/buttonToast"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Cliquez ici !">

</Button>

</LinearLayout>

Le bouton dispose d’un id (identifiant) unique, qui sera utilisé pour le retrouver et l’appeler dans notre code source. Il prendra toute la place disponible en largeur et seulement la place nécessaire en hauteur, ainsi qu’un texte « Cliquez ici ! ».

Vous pouvez utiliser l’onglet « Layout » situé en bas pour créer graphiquement l’interface, mais une connaissance syntaxique du code XML permet d’appréhender plus facilement les interfaces plus complexes que nous verrons dans les prochains tutoriaux.

Ouvrez le fichier « MonActivite.java » qui se trouve à l’emplacement « src/com.formation », le code est celui-ci :

package com.formation;

import android.app.Activity;

import android.os.Bundle;

public class MonActivite extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

Actuellement, si nous lançons l’application et que l’on clique sur le bouton : rien ne se passera. Pour régler ceci, nous allons rajouter du code pour définir l’action et c’est là que les listeners rentrent en jeu.

Nous ne pouvons pas directement appeler notre bouton dans notre activité, il faut pour cela aller le chercher dans le fichier XML, son id est alors utilisé.

Une activité dispose d’une méthode findViewById pour appeler un élément de la vue, avec en paramètre l’identifiant de l’objet que l’on souhaite appeler. Celui-ci est stocké dans le ResourcesManager qui se nomme R.

Button monBouton = (Button)findViewById(R.id.buttonToast);

Nous nous retrouvons alors avec une instance de notre bouton dans notre code directement utilisable. Nous allons utiliser une méthode de celui-ci pour exécuter une action lorsque l’on clique dessus, la méthode setOnClickListener est notre amie.

Cette méthode prend en paramètre un OnClickListener, notre application ne diposant pas de cette instance, nous allons lui en attribuer une comme ceci :

monBouton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

}

});

Cette interface implémente directement la méthode onClick, avec en paramètre la vue utilisée, ici notre bouton.

Nous allons rajouter un petit message à afficher lorsque l’on clique sur le bouton, les messages s’affichent via une classe nommée Toast (Hmm c’est bon les toast :lol: ).

La classe Toast dispose d’une méthode statique (pas besoin d’instancier l’objet pour utiliser ses méthodes) de type makeText, qui prend en paramètres le contexte qui se trouvera être notre application, puis un message et pour finir une durée.

La durée peut être Toast.LENGTH_SHORT ou encore Toast.LENGTH_LONG.

@Override

public void onClick(View v) {

Toast.makeText(MonActivite.this, "Coucou !", Toast.LENGTH_SHORT).show();

}

Lancez l’application et regardez le message s’afficher lorsque l’on clique sur le bouton.

Le Toaster !

Que c’est chouette tout ça! Je vais vous montrer une autre méthode pour gérer les listeners, je la trouve plus propre car cela évite de mettre tout le code dans un seul endroit.

Nous allons tout d’abord rajouter une interface à notre activité de type OnClickListener (mot clé implements en java).

public class MonActivite extends Activity implements OnClickListener

Puis normalement, Eclipse vous propose de rajouter les méthodes non implémentées dans notre classe.

@Override

public void onClick(View v) {

}

Nous allons rajouter du code à cette méthode, comme suit, ce qui devrait nous donner quelque chose de ce genre :

public class MonActivite extends Activity implements OnClickListener {

Button monBouton = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

monBouton = (Button)findViewById(R.id.buttonToast);

// On spécifie que le le listener est notre classe

monBouton.setOnClickListener(this);

}

@Override

public void onClick(View v) {

// Vérification de la vue cliquée

if(v == monBouton) {

Toast.makeText(this, "Coucou n°2", Toast.LENGTH_SHORT).show();

}

}

}

On se retrouve bien avec deux sections : l’une servant à la création de notre application et la deuxième à la gestion des cliques sur les divers éléments de l’interface.

Nous allons étoffer un peu plus notre application avec un changement d’écran lorsque l’on appuit sur notre bouton.

Commençons par créer une nouvelle activité nommée « MonAutreActivite », héritant de la classe Activity du package « android.app.Activity ».

Créons aussi un nouveau layout grâce à l’icône de la barre de menu ADT (3ème du carré rouge !).

Création d'un layout

Nous rajouterons un textview à ce Layout.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Coucou ! Ma deuxiéme activité"

></TextView>

</LinearLayout>

Ps : N’oubliez pas de rajouter un setContentView(R.layout.layoutcoucou); à votre deuxième activité pour lui attribuer le layout créé.

Lorsque l’on rajoute une activité à notre application, il faut la déclarer dans notre fichier AndroidManifest.xml sinon vous vous retrouverez avec une erreur.

Ouvrez le fichier XML et rendez-vous dans l’onglet Application, en bas de notre utilitaire de configuration assisté par ADT. On retrouve notre activité principale, pour en rajouter une nouvelle cliquez sur « ADD » et choisissez « Activity » ; sur la droite s’ouvre un petit panneau permettant de rajouter des informations primordiales à l’utilisation de notre activité. Le champ « Name » permet de spécifier le nom de classe de notre activité, cliquez dessus et choisissez notre deuxième activité.

Déclaration de l'activity

Vous pouvez aussi lui spécifier un « label » pour lui attribuer un nom.

Je vous mets à disposition le code XML du fichier AndroidManisfest.xml :

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.formation"

android:versionCode="1"

android:versionName="1.0">

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".MonActivite"

android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity android:name="MonAutreActivite" android:label="@string/app_name"></activity>

</application>

<uses-sdk android:minSdkVersion="7" />

</manifest>

Revenons à notre activité principale et dans la méthode « onClick », nous allons modifier le code pour pouvoir appeler notre deuxième activité.

Pour lancer une activité, il faut utiliser un Intent qui se chargera de faire le lancement de l’activité à travers la plateforme Android.

Un intent prend en paramètre deux options : le contexte (notre activité) et l’activité de destination.

Regardez la documentation des intent pour plus d’options à ce niveau.

La méthode startActivity qui prend en paramètre un Intent, nous servira à lancer l’activité demandée.

@Override

public void onClick(View v) {

if(v == monBouton) {

Intent monIntent = new Intent(this,MonAutreActivite.class);

startActivity(monIntent);

}

}

Lancez l’application et cliquez sur le bouton, la deuxième activité se lance alors, le bouton retour permet de revenir à l’activité précédente.

Nous voilà arrivé à la fin de notre tutoriel, dans la 3 ème partie nous nous pencherons sur l’utilisation plus poussée des intents que sur la méthode startActivityForResult(intent, requestCode) ;

A la prochaine pour un nouveau tutoriel sur la plateforme Android.

Download PDF
  • Hataka

    Bonsoir,

    Nickel tuto parfait :) sauf que quand je test mon bouton n’a pas de texte ! c’est bizarre ? j’ai un bouton vide mais tout marche bien

    Voila le code de mon bouton dans le main.xml

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    Bonsoir Hataka,

    Il doit manquer une partie de ton message ;)

  • Hataka

    Bonsoir,

    Désolé pour le dérangement j’ai finalement trouvé ^^
    j’avais ecrit android_text au lieu de android:text

    Au fait comment fonctionne la balise code ? apparemment mon message a été tronqué ?

  • Crash

    Bonjour,

    Si le bouton à cliquer est dans un autre layout, comme un frame layout dans mon cas, faut-il changer quelque chose?
    Parce que mon programme ne rentre jamais dans la méthode OnClick…
    D’avance merci,
    Yoann

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    Bonjour Crash,

    Normalement il n’y a aucun soucis à ce niveau.

  • Mcho

    Bonjour j’ai une question enfaite je fait une application et sur la page d’acceuil Activity j’ai donc plusieur bouton et chaque bouton doit donné sur une vue/layout différent mais il n’y a que le premier bouton pour lequel il m’affiche le layout correspondant donc si quelqu’un pouvait m’aider ou me dire comment gérer plusieurs intent sa serait cool

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    1 intent => 1 activity

    Pour chaque bouton crée un nouvel intent + une activité

Switch to mobile version