Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Kotlin
  3. Android : les éléments incontournables
Extrait - Kotlin Les fondamentaux du développement d'applications Android
Extraits du livre
Kotlin Les fondamentaux du développement d'applications Android Revenir à la page d'achat du livre

Android : les éléments incontournables

Les listes

1. Présentation

Afficher une liste pour présenter des informations est incontournable dans le développement d’une application. Il y a deux formes de listes fréquemment utilisées :

  • ListView : toutes les données sont chargées dès la création de la liste.

  • RecyclerView : seulement les données visualisées sont chargées.

Il est aujourd’hui souvent recommandé d’utiliser les RecyclerView pour afficher des listes de données. Les ListView sont présentées dans un but pédagogique étant donné que c’est la façon de faire historique et idéale pour débuter.

Les CardView seront aussi abordées dans ce chapitre, car elles sont indissociables des listes. Elles permettent de perfectionner le style des listes.

2. ListView

a. Présentation

Pour créer une liste à l’aide des ListView il est nécessaire de passer par quatre étapes :

  • Étape 1 : définir un élément de type ListView dans l’IHM d’une activité ou d’un fragment.

  • Étape 2 : définir le style des lignes d’informations affichées dans la liste. Ceci se fait dans un fichier de type layout.

  • Étape 3 : définir une classe adapter qui permettra de lier les données au style. L’adapter va créer autant d’éléments View que de données.

  • Étape 4 : lier l’adapter à la ListView.

b. Définir une ListView

La balise ListView permet de définir la liste. Elle est associée à l’identifiant la_liste_view, cet identifiant est utilisé dans le code de l’activité dans le but de récupérer un objet représentant la ListView. L’objet sera ensuite utilisé pour y lier l’adapter.

Les exemples sont réalisés dans un nouveau projet dont l’activité principale se nomme MainActivity.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:
android="http://schemas.android.com/apk/res/android" 
   xmlns:app="http://schemas.android.com/apk/res-auto" 
   xmlns:tools="http://schemas.android.com/tools" 
 ...

Les menus

1. Présentation

Définir un menu pour améliorer la navigation au sein de l’application est incontournable dans le développement d’une application. Il y a deux formes de menus fréquemment utilisées :

  • ActionBar : menu défini dans la barre du haut de l’écran.

  • NavigationDrawer : menu glissant sur le côté de l’écran.

2. ActionBar

a. Présentation

Pour créer une ActionBar dans une activité, il est nécessaire de passer par trois étapes :

  • Étape 1 : créer la structure du menu dans un fichier XML.

  • Étape 2 : lier le menu à l’activité.

  • Étape 3 : définir les actions de chaque bouton.

Les exemples sont réalisés dans un nouveau projet dont l’activité principale se nomme MainActivity.

b. Créer la structure du menu

Les fichiers permettant de définir la structure d’un menu doivent toujours se situer dans le dossier ressource res/menu. La balise menu permet d’englober les caractéristiques du menu et chaque balise item représente une option du menu. L’attribut showAsAction permet d’indiquer comment l’option sera affichée, cet attribut peut prendre les valeurs suivantes :

Valeur

Description

ifRoom

L’item n’est affiché dans la barre du haut que s’il y a assez de place sinon il se retrouve dans le menu de débordement en haut à droite.

withText

Affiche le texte de l’item. Exemple d’utilisation : showAsAction=" ifRoom| withText "

never

Place l’item dans le menu de débordement.

always

L’item est affiché dans la barre du haut.

res/menu/mon_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
   xmlns:app="http://schemas.android.com/apk/res-auto"> 
   <item 
       android:id="@+id/item_favoris" 
       android:title="Favoris" 
       android:icon="@android:drawable/btn_star_big_on" 
       app:showAsAction="always" 
       /> 
   <item 
       android:id="@+id/item_configuration" ...

Les pop-up

1. Toast

a. Présentation

Un toast est un message simple qui s’affiche à l’écran de votre téléphone. Un toast a besoin de trois paramètres : le contexte, un message à afficher et une durée d’affichage. La durée d’affichage est soit courte soit longue.

b. Usage historique

Voici le code permettant d’envoyer un toast. Cet usage est l’usage historique, il est toujours important de connaître cette syntaxe.

Affiche un toast d’une durée longue

Toast.makeText(this,"Bonjour",Toast.LENGTH_LONG).show() 

Affiche un toast d’une durée courte

Toast.makeText(this,"Bonjour",Toast.LENGTH_SHORT).show() 

c. Usage optimisé

Voici le code permettant d’envoyer un toast. Cet usage est simplifié grâce à l’extension ANKO. Pour pouvoir bénéficier de cette fonction, il est nécessaire de définir la dépendance de la librairie ANKO.

Dépendance

Cette dépendance est nécessaire pour installer la partie ANKO qui offrira un usage optimisé des toasts.

dependencies  
 
{ 
... 
   implementation "org.jetbrains.anko:anko-commons:0.10.5" 
 
... 
} 

Utilisation du toast d’une durée courte

toast("Bonjour") 

Utilisation du toast d’une durée longue

longToast("Bonjour") 

d. Démonstration

Définition de l’interface...

Les fragments

1. Présentation

Un fragment est un fragment d’interface graphique réutilisable dans plusieurs activités. Il peut y avoir plusieurs fragments dans une même activité. Leur plus-value est la réutilisabilité et elles offrent une certaine simplicité pour adapter une interface graphique aux supports utilisés. Les fragments ont leur propre cycle de vie.

2. Cycle de vie

Tout comme une activité, un fragment a un cycle de vie avec des fonctions qui s’exécutent lorsque l’état du fragment change. Par exemple, un événement se produit lorsque le fragment est créé.

Voici un diagramme permettant de visualiser le cycle de vie d’un fragment :

images/06EP01.png

Ci-dessous la description des fonctions liées au cycle de vie d’un fragment :

Fonction

Description

onAttach()

Cette fonction s’exécute lorsque le fragment se rattache à son activité.

onCreate()

Cette fonction s’exécute lorsqu’une nouvelle instance du fragment s’initialise.

onCreateView()

Cette fonction s’exécute lorsque son IHM est créée.

onActivityCreated()

Cette fonction s’exécute lorsque l’activité du fragment a terminé d’exécuter sa fonction onCreate.

onStart()

Cette fonction s’exécute lorsque le fragment est visible.

onResume()

Cette fonction s’exécute lorsque le fragment est visible et interactif.

onPause()

Cette fonction s’exécute lorsque le fragment n’a plus le focus.

onStop()

Cette fonction s’exécute lorsque le fragment n’est plus visible.

onDestroyView()

Cette fonction s’exécute lorsque la vue du fragment est supprimée.

onDestroy()

Cette fonction s’exécute avant que le fragment ne soit totalement supprimé.

onDetach()

Cette fonction s’exécute lorsque le fragment est détaché de son activité.

3. Structure

Il y a trois manières fréquentes de structurer les fragments, qui dépendent de la façon dont ces derniers vont être utilisés.

a. Fragment indépendant

Le fragment est totalement indépendant et gère lui-même son contenu et les actions utilisateurs au sein de sa propre interface graphique. Le développeur n’a qu’à...

Démonstration

La démonstration suivante présente une application avec plusieurs fragments et une seule activité. La transition entre les différents fragments se fait via un NavigationDrawer. Les classes et les fonctions sont commentées.

La démonstration est réalisée dans un nouveau projet de type Navigation Drawer Activity dont l’activité principale se nomme MainActivity.

Projet de type Navigation Drawer Activity

images/06EP02.png

Liste des fichiers intéressants de ce projet :

Fichier

Description

mainActivity.kt

Contenu de la logique permettant d’afficher les différents fragments.

activity_main.xml

Contient la présentation du navigationDrawer et un include vers app_main.xml

app_main_bar.xml

Définit la ToolBar et un include vers content_main.xml. 

content_main.xml

Contenu de l’activité, c’est-à-dire du conteneur de fragment.

BonjourFragment.kt

Contient la classe du fragment BonjourFragment.

HelloFragment.kt

Contient la classe du fragment HelloFragment.

OlaFragment.kt

Contient la classe du fragment OlaFragment.

fragment_bonjour.xml

Fichier définissant l’IHM du fragment. L’IHM affiche simplement "Bonjour".

fragment_hello.xml

Fichier définissant l’IHM du fragment. L’IHM affiche simplement "Hello".

fragment_ola.xml

Fichier définissant l’IHM du fragment. L’IHM affiche simplement "Ola".

mainActivity.kt

package fr.acos.navigationdrawerwithmanyfragmentswithkotlin 
 
import android.os.Bundle 
import android.support.design.widget.NavigationView 
import android.support.v4.app.Fragment 
import android.support.v4.view.GravityCompat 
import android.support.v7.app.ActionBarDrawerToggle 
import android.support.v7.app.AppCompatActivity 
import android.view.Menu 
import android.view.MenuItem 
import fr.acos.navigationdrawerwithmanyfragmentswithkotlin.
fragments.BonjourFragment 
import fr.acos.navigationdrawerwithmanyfragmentswithkotlin.
fragments.HelloFragment 
import fr.acos.navigationdrawerwithmanyfragmentswithkotlin.
fragments.OlaFragment 
import kotlinx.android.synthetic.main.activity_main.* 
import kotlinx.android.synthetic.main.app_bar_main.* 
import kotlinx.android.synthetic.main.content_main.* 
 
/** 
 * Classe représentant l'unique activité...