You are on page 1of 19

TPl: Interfaces graphiques

Exercice 1:

1. Creer !'interface graphique suivante, qui contient un TextView, un EditText (initialise


a 0) et un Button, et une lmageView : en creant entierement la vue en XML et en
code JAVA.

Number? -O ---------
INCREMENT

2. Implementer l'evenement OnClicklistener du boutton INCREMENT en utilisant les


methodes suivantes
a. Une classe interne;
public class MainActivity extends Activity {
private int value=O;
EditText text;
@Override

Ens. Walid SAAD Mat. Programmation Mobile Sec. Genie lnformatique


protected void onCreate(Bundle savedinstanceState)
super.onCreate(savedinstanceState);
setContentView(R.layout.activity_main);
text = (EditText)findViewByid(R.id.text);
text.setText(""+value);
inc = (Button)findViewByid(R.id.btn);
inc.setOnClickListener(new OnClickListener());

public void incrementer() {


value++;text.setText(""+value);

private class OnClickListener implements View.OnClickListener {


@override
public void onClick(View v) {

incrementer();

b. Une classe anonyme;


protected void onCreate(Bundle savedinstanceState)
super.onCreate(savedinstanceState);
setcontentView(R.layout.activity_main);
text = (EditText)findViewByid(R.id.text);
text. setText ('"'+value);
inc = (Button)findViewByid(R.id.btn);
inc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
incrementer();

});

public void incrementer() {


value++; text.setText( 1111 +value);

c. En mode Design ;

Tester !'application avec l'emulateur disponible. Changer !'orientation de l'ecran, que


remarquez-vous a propos l'etat de l'activite Android? Quel est le role de l'objet Bundle?

3. Implementer les deux fonctions suivantes pour Sauvegarder/Restaurer


manuellement l'etat de l'activite. Tester !'application et pivoter l'ecran de votre
emulateur, que remarquez-vous?
protected void onsaveinstanceState(Bundle outstate) {
super.onsavernstancestate(outstate);
value++;
outstate.putint ("value", value);
Toast.makeText (this, Sauvegarde !
fl fl, Toast_ LENGTH_LONG) .show();

Ens. Walid SAAD Mat. Programmation Mobile Sec. Genie lnformatique


protected void onRestoreinsta nceState(Bundle savedinstanceState)
super.onRestoreinstanceS tate(savedinstanceSta te);
value = savedin stanceState.getint("value" );
text.setText( ""+value);
Toast.makeText(this,"Restauration!, " Toast.LENGTH_LONG) .show ();

Commentaires:
Si une application se met en arriere-plan (si on appuie sur la touche Home pour revenir au
0 bureau), on risque de perdre les valeurs des elements graphiques du cette applicat ion
{Android peut decharger la memoire pour gagner des ressources). Par exemple, lorsque on
rebascule sur une application {appui long sur la touche Home), !'application peut avoir perdu
les val eurs saisies dans les zones de t exte.
• Android permet a travers l'objet Bundle (passe en parametre de la fonction
Oncreate()) de restaurer les valeurs des interfaces d'une activite.
• a
Pour forcer Android sauvegarder/restaurer les valeurs des elements graphiques, on
doit implementer les fonctions onSavelnstanceState et onRestorelnstanceState.
• Pour forcer Android a decharger les valeurs des elements graphiques, on configure
notre appareil comme suit : Development tools > Development Settings, cocher
Immediately destroy activities.
• L'objet Bundle ne peut pas sauvegarder/restaurer les zones de textes qui ne possedent
pas un identifiant.
• L'objet Bundle ne peut pas restaurer une application completement detruite.

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
Exercice 2:

L'IMC est un nombre qui se calcule a partir de la taille et de la masse corporelle d'un
individu. L'int erface graphique pour calculer l'IMC ressemble a la figure suivant e :

0
My Appljcation
Poids:

Talll

CALCULER L:IMC

EFFACER

Resuhal:
ous devez cllquer sur lebouton • Caleolerr lMC • pour
obtenir un resultat

• La formule pour calculer l'IMC est: poids (en kilogrammes)/ taille (en metres) 2.

• Le bouton EFFACER remet a zero taus les champs {sans oublier le texte pour le
resultat).
• Les elements dans le RadioGroup permettent a l ' utili sat eur de preciser en quelle
unite ii a indique sa taille. Pour obtenir la taille en metres depuis la taille en
centimetres ii suffit de diviser par 100.

• Des qu'on change les valeurs dans les champs Poids et Taille, on remet le texte du
resultat par defaut puisque la valeur calculee n'est plus valable pour les nouvelles
valeurs.

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
• On enverra un message d'erreur si l'utilisateur essaie de faire le calcul avec une taille
egale a zero grace a un Toast.
Remarques

• Void la syntaxe pour construire un Toast: static Toast makeText(Context context,

0 CharSequence texte, int duration). La duree peut etre indiquee


constante Toast.LENGTH_SHORT pour un message court
a l'aide de la
et Toast.LENGTH_LONG pour un message qui durera plus longtemps.
Entin, ii est possible d'afficher le Toast avec la methode void show().
• Pour savoir si une CheckBox est selectionnee, on utilisera la methode boolean
isChecked() qui renvoie true le cas echeant .
• Pour recuperer l'identifiant du RadioButton qui est selectionne dans un RadioGroup ii
taut utiliser la methode int getCheckedRadioButtonld ().
• On peut recuperer le texte d'un EditTexta l'aide de la fonction Editable getText (). On
peut ensuite vider le contenu de cet objet Editable a l'aide de la fonction void clear().

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
Exercice 3 (ListView simple avec ArrayAdapter par defaut)

1. En ut ilisant une ListView, creer la liste des et udiants suivants :

0 Eludlanl 1

Eludlant 2

EIud 1anI 3

Etudlant 4

Etudlant 5

Etud1ant 6

Etudlant 7

La fonction OnCreate() :
protected void onCreate(Bundle savedinstanceS tate)
super.o nCreate(savedi nstanceState) ;
setContentView(R.layout.activity_main);
String[] etudiants = new String[]{
"Etudiant 1" , "Etudiant 2" , "Etudiant 3" , "Etudiant
4" , "Etudiant 5" , "Etudiant 6" ,
"Etudiant 7"I ;
list= (ListView) findViewByid(R.id.mylist);
ArrayAdap ter<String> tablea u = new
ArrayAdapter<String>(list.getContext(),
android.R.layout.simple list item_l, etudiants);
list .setAdapter(tableau);

2. On suppose qu' on a 50 etudiant s, pensez a modifier le programme precedent pour


remplir aut omat i quement la List eView.

La fonction OnCreate() :
protected void onCreate(Bundle savedinstanceState)
super.onCreate(savedinstanceState);
setconte ntview(R.layout.activity_main);
list = (ListView)findViewByid(R . id.mylist);
ArrayAdapter<String> tableau= new
ArrayAdapter<String>( list.getContext(),
android.R.layout.simple list item 1);
for ( i n t i = l ; i<=50; i++) {
tableau.add("Etudiant " + i); }
list.setAdapter(tableau);

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
3. On veut maintenant ajouter un avatar pour chaque etudiant. Ce qui donne dans la
preview !'int erf ace ci -dessous. Pour cela, II faut creer un nouveau gabarit (layout)
etudiantinfo.xml contenant une lmageView et un Text View . Ce layout representera
une ligne de la ListeView.

11 22
"
0 TP1-3 ...,.
0-Ji'I

B E1udian 1

B Et1Khan 2

B Etudrant 3

l] E1ud1ant 4

a ElUd1am 5

B Etud1ant6

B E1ud1an 7

l] Etud1ant 8

B Etud1ant 9
+-=:,

B E1ud1ant 10
a
La fonction OnCreate():
protected void oncreate(Bundle savedinstanceState)
super.onCreate(savedinstanceState);
setContentView(R.layout. activity_main);
ListView list = (ListView)findViewByid(R.id.mylist);
ArrayAdapter<String> tableau = new
ArrayAdapter<String>(lis t.getcontext(),
R.layout. etudiantinfo,R.id.no m);
for (int i=l; i<=50; i++) {
tableau.add("Etudiant " + i); }
list.setAdapter(tableau);

Contenu du gabarit etudiantinfo.xml:

< ?xmJ. version="l.0" encoding="utf-8" ?>


<LinearLayout xm1ns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation ="horizontal." android:layout_wid th="match_parent"
android:layout _height= "match_parent"
android:weightSwn ="l">

<ImageView
android:src="@drawable/contact"
android:layout_width="59dp"
android:layout height="40dp"
android:id="@+id/imageView" />

<TextView
android:text="TextView"

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
android:layout_width="167dp"
android :layout _height ="wrap_content"
android:id="@+id/nom" />

</LinearLayout>

Commentaires:
0 Dans cet exemple List View, ii faut utiliser le constructeur de ArrayA dapter suivant:
ArrayAdap er (Context context, i nt resource, int textViewResourceld)
Ou ressource est l'id du layout a a
appliquer chaque ligne et t extView Resourceld est l'id de la
zone de texte inclue dans ce layout . A chaque entree de la List View, la vue generee ut ilisera le
layout etudiantin fo.xml et la zone de texte cont iendra la chaine de caracteres passee en
a
argument la methode add.
4. On veut maint enant afficher l'etudiant selectionne de la ListView dans un message
Toast. Pour cela, ii faut ajouter l' evenement OnltemClicklistener a la classe
MainActivity, imp lementer !' inte rface AdapterView.OnltemClicklistener et redefi nir la
methode onltemClick{).

Code de la classe MainActivity:

public class MainActivity extends Activity implements


AdapterView.OnitemClickListener
Listview list;

protected void onCreate(Bundle savedinstanceState)


{......l ist.setOnitemClickListener(this); J
@O verride

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
public void onitemClick(AdapterView<?> parent, View view, int
position, long id) {
String element= (String)parent.getitemAtPosition(position);
Toast .makeText(this ,element, T oast.LENGTH_LONG) . s how();

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
Exercice 4 (ListView complexe avec ArrayAdapter personnalise)

Dans cet exercice nous allons creer une ListView complexe avec plusieurs donnees afin de
gerer les absences des etudiants dans une matiere donnee. Comme le montre la preview ci-
dessous, nous allons ajouter l'adresse email, l'option et le nombre d'absence.
Lorsque chaque item de la liste contient plusieurs donnees dynamiques, ii taut recoder la
classe ArrayAdapter.
G

Etudlant 1
nom pr nom a;gm 11 com
1
ID

Eludlant 2
nom.prenom@gma1I com
2
SRS

udl n 3
nom pr noml@gmatl com
0
SRS

E udl n 4
nom prenom a;gma I com
4
GUD

Etapes d'implementation:
1. Creer un nouveau gabarit etudiantinfo2.xml representant chaque item de la ListeView.

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
2. Definir le model de donnees : nous allons creer une classe contenant les donnees d'un
Etudiant.
public class Etudiant {
private String option;
private String nom;
private String email;
private int abs;

public Etudiant(S tring option, String nom, String email,int abs)


0 this.option = option;
this.nom = nom;
this.email = email;
this.abs = abs;

public String getNom()


return nom;

public void setNom(String nom) {


this.nom = nom;
}
}
3. Creer le code du notre EtudiantAdapter personnalise heritant de la classe de base
ArrayAdapter.
public class EtudiantAdapter extends ArrayAdapter<Etudiant>
//etudiants est la liste des models a afficher
public EtudiantAdap ter(Context context, List<Etud iant>
etudiants) {
super(context, 0, etudiants);

@Override
//convertView est notre vue recyclee
public View getView(int position, View convertView , ViewGroup
parent) {
; ·Android nous fournit un convert View null lorsqu'il nous demande
de la creer dans le cas concraire, cela veut dire qu'il nous
fournit une vue recyclee*/
if(convertView == null) {
/* on recupere notre gabarit etudiantinfo2 via un
Layoutinflater, qui va charger un layout xml dans un objet View*/
convertView =
Layoutinflater.from(getco ntext()).inflate(R.layout. e tudiantinfo2,pa
rent, false );
)
//comme nos vues sont reutilisees, notre convertview
possede deja un ViewHolder
EtudiantViewHolder viewHolder = ( EtudiantViewHolder)
convertView.getTag();
if(viewHolder == null ) {
//si elle n'avait pas encore de ViewHolder
viewHo lder = new EtudiantViewHolder(;)
//recuperer nos sous vues
viewHolder.nom = ( TextView)
convertView.findViewByid(R . id.nom);
viewHolder.email = (TextView)
convertView.findViewByid(R .i d.email);
viewHolder.option = (TextView)
convertView.findViewByid(R.id.option);

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
viewHolder .abs = (TextView)
convertView.findViewByid (R.id.nbabs);
viewHolder.avatar = (ImageView)
convertview.findViewByid(R .id.avatar);
1lpuis on sauvegarde le mini-controlleur dans la vue
convertView.setTag(viewHolder);

l/getitem(position) va recuperer l'item iposition] de la


List<Etudiant> etudiants
0 Etudiant etudiant = getitem(position);

//il ne reste plus qu'a remplir notre vue


viewHolder.nom .se tText(etudiant.getNom());
viewHolder.email .setText(etudiant.getEmail()) ;
viewHolder.option.setText(etudiant.getOption());
viewHolder.abs.setText(""+etudiant.getAbs());

/*nous renvoyons notre vue a l'adapter, afin qu'il l'affiche et


qu'il puisse la mettre a recycler lorsqu'elle sera sortie de
l'ecran*/
return convertView;

private class EtudiantV iewHolder{


public TextView nom;
public TextView email;
public TextView option;
public TextView abs;
public ImageView avatar ;

Commentaires:
Afin d'eviter d'appeler les methodes findViewByld a chaque reutilisation des vues, Android a
rajoute un concept, nomme ViewHolder (gardien/protecteur de vue), qui va avoir le role de
a
mini controlleur, associe chaque cellule, et qui va stocker les references vers nos sous vues
(dans notre cas : nom, email, option, abs et avat ar) .

Ce contr61eur va ensuite etre stocke en tant que propriete de la vue {plus precisement dans
l'attribut tag) afin de pouvoir garder toujours le meme principe de recyclage, une vue n'a
qu' un seul ViewHolder, et inversement.

4. Utiliser EtudiantAdapter dans la classe M ainAct ivit y :


a. Attacher I' Adapter a notre ListView;
protected void oncreate(Bundle savedinstancestate)
super.o nCreate(savedinstanceState) ;
setContentView(R.layout.ac tivity_main);
ListView list = (ListView) findViewByid(R .id.mylist );

List<Etudiant> etudiants =new ArrayList<Etudiant>();


EtudiantAdapter adapter= new
EtudiantAdapter (MainActivity.this, etudiants);
list.setAdapter(adap ter);

b. Ajouter les donnees des etudiants a la List eView.

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
protected void onCreate(Bundle savedinstanceS tate)

adapter .add(new Etudiant ( 11 GLID 11 , "E tudiant 1 11 ,


" nom. prenom@gmail.com 11 , l ));
adapter .add(new Etudiant(11 SRS 11 , "Etudiant 2 11 ,
" nom.prenom@gmail.com 11 , 2 )) ;
adapter .add(new Etudiant( 11 SRS 11 , "Etudiant 3 11 ,
" nom.p renom@gm ail.com 11 , 0)) ;
adapte r.add(new Etudiant( 11 GLID 11 , "Etudiant 4 11 ,
0 " nom.prenom@gmail.com 11 , 4));
adapter .add(new Etudiant( 11 SRS 11 , "Etudiant 5 11 ,
" nom.prenom@gmail.com 11 , 0)) ;
)
Exercice 5 (RecyclerView)
Dans cet exercice on vous demande de refaire la question 3 de l'exercice 3 avec un
RecyclerView au lieu d'une ListVie w.

Etapes d'implementation:
l. Creer un nouveau gabarit etudiantinfo2.xml representant chaque item de la List eView.
2. Definir le model de donnees : nous allons creer une classe contenant les donnees d'un
Etudiant.
public class Etudiant {
private String option;
private string nom ;
private String email;
private int abs;

public Etudiant(S tring option, String nom, String email,int abs)

this.option = option;
this.nom = nom;
this.email = email;
this.abs = abs;

public String getNom()


return nom;

public void setNom(String nom)


this.nom = nom;
)
}
3. Creer le code du notre EtudiantAdapter personnalise heritant de la classe
RecyclerView.Adapter
public class EtudiantAdapter extends
RecyclerView.Adapter<EtudiantAdapter.EtudiantHold er>
private Context context;
private Layoutinflater inflater ;
List<Etudiant> data = Collections. emptyList() ;
Etudiant etudiant;
II creer le constructeur pour initialiser le contexte et les
donnees a afficher
public EtudiantAdapter(Context context, List<Etudiant> data)
this.context = context;
inflater = Layoutinflater .from(context);
this.data = data;

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
II creer notre vue a partir du fichier layout
@Override
public EtudiantHolder onCreateViewHolder(ViewGroup parent, int
viewType) {
View view= inflater. inflate(R .layout .etudiantinfo2,
paren t, false);
EtudiantHolder holder= new EtudiantHolder(view);
return holder;

0 II Bind data
@Override
public void onBindViewHolder(Etud iantHo lder holder, int position)

llrecuperer la position courante de l'item et mettre a jour


1e RecyclerView
etudiant=data .get ( posi ti on);
holder .norn.setText(etudiant.getNom());
holder.email.setText(etudiant.getEmail());
holder.option.setText(etudiant.getOption());
holder.abs.setText( ""+etudiant.getAbs());

/lretourner la taille de la liste d'item


@Override
public int getltemcount()
return data.siz e();

class EtudiantHolder extends Recyc lerView.ViewHolder{


public Textview norn;
public TextView email;
public TextView option;
public TextView abs;
public ImageView avatar ;

public EtudiantHolder(View itemView) {


super(itemView);
nom = (TextView) itemView.findViewByid(R. id.nom);
email = (TextView) itemView.findViewByid(R.id.email);
option = (Tex tView) itemView.findViewByid(R.id.op tion);
abs = (TextView) itemView.findViewBy id (R. id.nbabs);
avatar = (ImageView) itemView.findViewByid(R.id.avatar);

Commentaires:
Le code de !'Adapter est plus complexe: ii s'agit d'une classe util isa nt un generique
a
{V iewHolder) qui doit creer un objet encapsulant l'objet graphique afficher pour chaque
item {dans notre cas EtudiantHolder heritant de RecyclerView.ViewHolder). L'Adapter a
deux buts:
• Creer les objets graphiques : onCreateViewHolder(ViewGroup parent, int viewType)
• Changer le contenu d'un objet graphique stocke dans EtudiantHolder en fonction de
la position de la liste: onBlndVlewHolder(StringHolder holder, Int position).

4. Utiliser EtudiantAdapter dans la classe MainActivity:


a. Attacher I' Adapter a notre RecyclerView;
protected void onCreate(Bundle savedinstanceState)
super.oncreate(savedinstanceState);

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
setCo ntentView(R.layout .activity_main);
I I Setup and Handover data to recyclervietv
myrcv = (RecyclerView) findViewByid(R.id.rcv ) ;
List<Etudiant> data = genererEtudiants();
myAdapter = new EtudiantAdap ter(MainActivity.this, data);
myrcv .setLayoutManager(new
LinearLayoutManager(MainActivity.this));
myrcv.setAdapte r( myAdapter);

0
b. Ajouter les donnees des etudiants au RecyclerView.

private List<Etudiant> genererEtudiants(){


List<Etudiant> etudiants = new ArrayLis t<Etudiant>();
etudiants.add( new Etudiant("GLID" ,"Etudia.nt 1" ,
"nom .prenom@gmail .com", l ));
etudiants. add(new Etudiant ("SRS" , "Etudiant 2",
"nom.prenom@ gmail.com" , 2 ));
etudiants.add(new Etudiant("SRS" , "Etudiant 3",
"nom.prenom@gmail.com" , 0)) ;
etudiants.add(new Etudiant("GLID" , "Etudiant 4 11 ,
"nom.prenom@ gmail.com" , 4 ));
etudiants.add(new Etudiant ("SRS" , "Etudiant 5",
"nom.prenom@ gmail.com" , 0));
return etudiants;

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
Exercice 6 (Menu ActionBar)

Dans cet exercice on souha it e ajouter un ActionBar a !'applicat ion reali see dans l'exerc ice 6
cornme le montre la preview ci-dessous. L' Act ionBar permettra de gerer la list e des etudiants.

0 Ajouter

Chercher
Etudl;;
nom. Editer

GLID
Supprimer

Etudlan\ 2
nom.prenom@gmall.com
2
SRS

Etudlan1 3
nom .prenom@gmall .com
0
SRS

Etudiant 4
nom.prenom@gmall.com
4
GLID

A)outer d'un etudiant

Etudlant S
nom.prenom@gmall.com

Etapes d'implementation:
1. Creer le fichier layout suivant my_menu.xml dans res/menu/, representant notre
ActionBar a implementer.
<?xm.l version= "l.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.androi.d com/ apk/res-auto"
xm.lns: an droid="http://sch emas.androi d.com/apk/res/android>"

<item android:title="Ajouter"
android:icon="@android:draw able/ic_input_add"
android :showAsAction="ifRoom"
android:id="@+id/add" />
<item
android:id="@+id/search"

android:actionViewClass= "android.support .v7.widget.SearchView"


android:icon="@draw able/ic_search_black_24dp"
android:title="Chercher"
android :showAsAction= "ifRoom" />
<item andro:id :title= "Editer"
android:icon="@android: drawable/ic_menu edit"

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
android :id= "@+id/edit" />
<item android :title= "Supprimer"
android :icon= "@android:draw able/ic_delete"
android:id="@+id/delete" />
</menu >

EEi §I . Ne.xus 4 • 25• () App Theme @ Language• D·


••
Parette 1€1 I • · !--
0 Menu Item
[:= Search Item
825%(±) E;) ,I a
0 100 ,DJ :OJ
11:l Menu
[ITf Group
0

Component Tree
IQ menu
'§ d (Ajoute r)
;- search (Cherc:herJ
[1?.l edit (Editer)
= d e le t e (Suppr imer)

J Design I Tat
2. Modifier la classe MainActivity comme suit :
a. La classe MainActivity doit heriter de AppCompatActivity :
public class MainActivity extends AppCompatActivity {}
b. Implementer les methodes onCreateOptionsMenu et onOptionsltemSelected
de la man iere suivante :
public boolean onCreateOp tionsMenu(Menu menu) {
II Inflate the menu; this adds items to the action bar if it
is present.
getMenuinflater().inflate(R .menu .mymenu, menu);
return super .onCreateOptionsMenu(men u);

@Override
public boolean onOptionsitemSelected(Menuitem item) {
int id = item.getitemid();
if (id== R .id.search) {
Toas t.makeText ( getApplicationCon text(), "Rechercher un
etudiant", Toast.LENGTB_LONG) . show();

if (id R.id.ad d )

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
To as t . ma k e Te x t ( g e t A pp l i c a t i o n Co n t e x t () , "Aj o u t e r un
e t udi a n t " , T o a s t .L EN GT H_ L ONG ) . show ( ) ;

if ( i d == R . i d . de l e t e ) {
To a s t . ma k e Text ( g e t Ap p l i c a t i o n c o n t e x t () , "supprimer un
e t udi ant " , T o a s t . LEN GT H_ L ON G ) . show () ;

if ( i d == R . i d . e d i t ) {
To as t . ma k e Te x t (g e t Ap p l i c a t i o n Co n t e x t () , "Mo d i f i e r un
0 e t udi a n t " , T o a s t .L ENGT H_ LONG ) . show ( ) ;

return s up er . o no p t i o ns i t e mSe l e c t e d ( i t e m ) ;

Commentaires :

• a
L'a tt ribut app:showAsAction="ifRoom" associe une act ion permet de demander
d'ajouter cette action comme un bouton dans la barre d'act ion , si la place est
disponible.
• La methode onCreateOptionsMenu(Menu menu) permet de cont roler Le menu de
l'action bar. Cette methode charge un fichier menu depuis les ressources
{res/menu/).
• La methode onOptionsltemSelected(Menultem item) permet de filtrer les clicks de
l'ut ilisat eur su r un des boutons de l'act ion bar.

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique
Exercice 7 (CardView)

Ou vous demande dans cet exercice de modifier l'exercice 6 en utilisant une cardView qui
representera chaque etudiant. L'ensemble des CardView sera affiche dans un RecyclerView .

II faut commencer par modifier le gabarit etudiantinfo2.xml par l'ajout d'une ardView qui va
0 contenir toutes les informations relatives a un etudiant (avatar, nom, email, option et
nombre d'absence).

On veut afficher pour chaque etudiant sa photo. Pour cela :

• Ajouter !'ensemble de photos dans le dossier res/drawable.


• Modifier le constructeur de la classe Etudiant pour qu'il prenne en parametre la
photo (R.drawable.X, X est le nom de la photo).
• Modifier la methode onBindVie wHolder() de L'Adapter pour afficher la photo de l'etud iant
holder.avatar .set lmageResource( etudiant.getAvatr());

Ens. Walid SAAD Mat. Programmation Mobile Sec. Gen ie lnfo rmat ique

You might also like