09.02.2017 Views

creez-des-applications-pour-android

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

3.7 Gestion <strong>des</strong> menus de l’application<br />

Où menu est le menu à construire, vue la vue sur laquelle le menu a été appelé et menuInfo indique<br />

sur quel élément d’un adaptateur a été appelé le menu, si on se trouve dans une liste par exemple.<br />

Cependant, il n’existe pas de méthode du type OnPrepare cette fois-ci, par conséquent le menu<br />

est détruit puis reconstruit à chaque appel. C’est <strong>pour</strong>quoi il n’est pas conseillé de conserver le<br />

menu dans un paramètre comme nous l’avions fait <strong>pour</strong> le menu d’options. Voici un exemple de<br />

construction de menu contextuel de manière programmatique :<br />

//Notez qu'on utilise Menu.FIRST <strong>pour</strong> indiquer le premier élément d'un menu<br />

private int final static MENU_DESACTIVER = Menu.FIRST ;<br />

private int final static MENU_RETOUR = Menu.FIRST + 1 ;<br />

@Override<br />

public void onCreateContextMenu(ContextMenu menu, View vue, ContextMenuInfo menuInfo) {<br />

super.onCreateContextMenu(menu, vue, menuInfo);<br />

menu.add(Menu.NONE, MENU_DESACTIVER, Menu.NONE, "Supprimer cet élément");<br />

menu.add(Menu.NONE, MENU_RETOUR, Menu.NONE, "Retour");<br />

}<br />

On remarque deux choses. Tout d’abord <strong>pour</strong> écrire <strong>des</strong> identifiants facilement, la classe Menu<br />

possède une constante Menu.FIRST qui permet de désigner le premier élément, puis le deuxième<br />

en incrémentant, etc. Ensuite, on passe les paramètres à la superclasse. En fait, cette manœuvre<br />

a <strong>pour</strong> but bien précis de permettre de récupérer le ContextMenuInfo dans la méthode qui<br />

gère l’évènementiel <strong>des</strong> menus contextuels, la méthode boolean onContextItemSelected<br />

(MenuItem item). Ce faisant, vous <strong>pour</strong>rez récupérer <strong>des</strong> informations sur la vue qui a appelé<br />

le menu avec la méthode ContextMenu.ContextMenuInfo getMenuInfo () de la classe<br />

MenuItem. Un exemple d’implémentation <strong>pour</strong> notre exemple <strong>pour</strong>rait être :<br />

@Override<br />

public boolean onContextItemSelected(MenuItem item) {<br />

switch (item.getItemId()) {<br />

case MENU_DESACTIVER:<br />

item.getMenuInfo().targetView.setEnabled(false);<br />

}<br />

case MENU_RETOUR:<br />

return true ;<br />

}<br />

return super.onContextItemSelected(item);<br />

Voilà ! Le ContextMenuInfo a permis de récupérer la vue grâce à son attribut targetView. Il<br />

possède aussi un attribut id <strong>pour</strong> récupérer l’identifiant de l’item (dans l’adaptateur) concerné<br />

ainsi qu’un attribut position <strong>pour</strong> récupérer sa position au sein de la liste.<br />

3.7.3 Maintenant que vous maîtrisez les menus, oubliez tout<br />

Titre racoleur, j’en conviens, mais qui révèle une vérité qu’il vous faut considérer : le bouton<br />

||Menu|| est amené à disparaître. :o De manière générale, les utilisateurs n’utilisent pas ce bouton,<br />

il n’est pas assez visuel <strong>pour</strong> eux, ce qui fait qu’ils n’y pensent pas ou ignorent son existence.<br />

C’est assez grave, oui. Je vous apprends à l’utiliser parce que c’est quand même sacrément pratique<br />

et puissant, mais c’est à vous de faire la démarche d’apprendre à l’utilisateur comment<br />

217

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!