patk29 Posted November 10, 2010 Share Posted November 10, 2010 Bonjour, j'apprends actuellement la programmation android d'après le livre de chez Eyrolles une méthode tirée du bouquin pour la création des sous menus ne fonctionne pas dans l'emulateur alors que le reste des exemples du chapitre fonctionnaient. pas d'erreur de compilation par ailleurs. voici l'extrait du code en question : @Override public boolean onCreateOptionsMenu(Menu menu){ //nous créons un premier menu sous forme de sous menu //les sous menu associés à ce menu seront ajoutés à ce sous menu SubMenu sousMenu = menu.addSubMenu(0, MENU_PARAMETRE, Menu.NONE, "Paramètres").setIcon(R.drawable.icon); sousMenu.add(0, SOUSMENU_AUDIO, Menu.NONE, "Audio").setIcon(R.drawable.icon); sousMenu.add(0, SOUSMENU_VIDEO, Menu.NONE, "Video"); // il est possible de placer une image dans l'entete du sous menu sousMenu.setHeaderIcon(R.drawable.icon); // nous créons notre deuxieme menu menu.add(0, MENU_QUITTER, Menu.NONE, "Quitter"); return true; } merci de vos suggestions Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 10, 2010 Share Posted November 10, 2010 (edited) Salut! Que dit ton LogCat au moment de lancer le menu? Edit : J'utilise aussi ce bouquin, j'ai jeté un oeil, le code est le même que dans le livre, pas d'oubli de virgule ni quoi que ce soit... Edit 2 : J'imagine que tu as bien déclaré tes deux constantes au début du code? Edited November 10, 2010 by Kricek Quote Link to comment Share on other sites More sharing options...
patk29 Posted November 10, 2010 Author Share Posted November 10, 2010 les variables sont bien déclarées oui. pour le reste je n'ai pas activé logcat et à vrai dire je ne connais pas la marche a suivre ;) Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 10, 2010 Share Posted November 10, 2010 "Windows > ShowView > Other" puis "Android > LogCat" Ca te donnera les messages internes au téléphone... (Erreurs, Infos, ... etc...) C'est là que tu vois quand une exception pète... Quote Link to comment Share on other sites More sharing options...
patk29 Posted November 11, 2010 Author Share Posted November 11, 2010 j'ai un message du genre: activity com.exemple.menu has leaked window com.android.internal.policy.impl.... Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 12, 2010 Share Posted November 12, 2010 j'ai un message du genre: activity com.exemple.menu has leaked window com.android.internal.policy.impl.... C'est un message en rouge? Normalement, si ton appli plante, tu dois avoir un gros bloc de plusieurs lignes rouges, avec les lignes qui sont concernees dans ton code... Tu peux faire un copier coller de tout le bloc rouge, stp? Quote Link to comment Share on other sites More sharing options...
patk29 Posted November 12, 2010 Author Share Posted November 12, 2010 (edited) 11-12 05:56:55.693: ERROR/WindowManager(213): Activity com.exemple.onglets.menu has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@43b903a0 that was originally added here 11-12 05:56:55.693: ERROR/WindowManager(213): android.view.WindowLeaked: Activity com.exemple.onglets.menu has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@43b903a0 that was originally added here 11-12 05:56:55.693: ERROR/WindowManager(213): at android.view.ViewRoot.<init>(ViewRoot.java:227) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.view.Window$LocalWindowManager.addView(Window.java:424) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.app.Dialog.show(Dialog.java:239) 11-12 05:56:55.693: ERROR/WindowManager(213): at com.android.internal.view.menu.MenuDialogHelper.show(MenuDialogHelper.java:86) 11-12 05:56:55.693: ERROR/WindowManager(213): at com.android.internal.policy.impl.PhoneWindow.onSubMenuSelected(PhoneWindow.java:763) 11-12 05:56:55.693: ERROR/WindowManager(213): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:862) 11-12 05:56:55.693: ERROR/WindowManager(213): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:525) 11-12 05:56:55.693: ERROR/WindowManager(213): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.view.View.onTouchEvent(View.java:4179) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.widget.TextView.onTouchEvent(TextView.java:6540) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.view.View.dispatchTouchEvent(View.java:3709) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 11-12 05:56:55.693: ERROR/WindowManager(213): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.os.Handler.dispatchMessage(Handler.java:99) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.os.Looper.loop(Looper.java:123) 11-12 05:56:55.693: ERROR/WindowManager(213): at android.app.ActivityThread.main(ActivityThread.java:4363) 11-12 05:56:55.693: ERROR/WindowManager(213): at java.lang.reflect.Method.invokeNative(Native Method) 11-12 05:56:55.693: ERROR/WindowManager(213): at java.lang.reflect.Method.invoke(Method.java:521) 11-12 05:56:55.693: ERROR/WindowManager(213): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 11-12 05:56:55.693: ERROR/WindowManager(213): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 11-12 05:56:55.693: ERROR/WindowManager(213): at dalvik.system.NativeStart.main(Native Method) Edited November 12, 2010 by patk29 Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 12, 2010 Share Posted November 12, 2010 (edited) A quel moment intervient ton plantage? Si tu parles anglais, j'ai trouvé ca: Lien... Apparemment, cela viendrait du fait que tu veux changer l'état d'une activité alors qu'elle n'est plus affichée, si j'ai bien compris... Donc à voir où tu as placé l'appel à cette méthode... Est ce que tu as bien tout le code de l'exemple précédent, concernant les menus? Et si oui, ou est-il placé? EDIT : J'ai également trouvé ca au sujet de ton erreur: Android is communicating to you that you’ve tried to put a popup in a location that no longer exists, or you don’t have access to. Et en creusant un peu plus, il semblerait, que tu veux fermer une popup qui l'est déjà. Pourrais tu mettre l'intégralité de ton code en copier coller, stp? Edited November 12, 2010 by Kricek Quote Link to comment Share on other sites More sharing options...
patk29 Posted November 12, 2010 Author Share Posted November 12, 2010 je n'ai fait que suivre l'exemple du bouquin qui modifie la méthode onCreateOptions dans le code initial du bouquin p.142. voici l'intégralité du code : package com.exemple.onglets; import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.widget.Toast; public class menu extends Activity { /** Called when the activity is first created. */ // pour faciliter la gestion des menus // nous creons des constantes private final static int MENU_PARAMETRE = 1; private final static int MENU_QUITTER = 2; private final static int SOUSMENU_VIDEO = 1000; private final static int SOUSMENU_AUDIO = 1001; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu){ //nous créons un premier menu sous forme de sous menu //les sous menu associés à ce menu seront ajoutés à ce sous menu SubMenu sousMenu = menu.addSubMenu(0, MENU_PARAMETRE, Menu.NONE, "Paramètres").setIcon(R.drawable.icon); sousMenu.add(0, SOUSMENU_AUDIO, Menu.NONE, "Audio").setIcon(R.drawable.icon); sousMenu.add(0, SOUSMENU_VIDEO, Menu.NONE, "Video"); // il est possible de placer une image dans l'entete du sous menu sousMenu.setHeaderIcon(R.drawable.icon); // nous créons notre deuxieme menu menu.add(0, MENU_QUITTER, Menu.NONE, "Quitter"); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu){ // nous modifions l'intitulé de notre premier menu // par un intitule différent a chaque clic avec l'heure système menu.getItem(0).setTitle(SystemClock.elapsedRealtime()+""); menu.getItem(0).setIcon(android.R.drawable.ic_secure); return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case MENU_PARAMETRE: Toast.makeText(menu.this, "Ouverture des paramètres",Toast.LENGTH_SHORT).show(); case MENU_QUITTER: finish(); return true; default: return true; } } } Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 12, 2010 Share Posted November 12, 2010 A mon avis, c'est ta méthode "OnPrepareOptionMenu" qui pose souci... Essaye de la mettre entièrement en commentaire et refais le test, pour voir... Note au passage à quel moment intervient le problème (Démarrage, lors du clic sur le bouton...). Quote Link to comment Share on other sites More sharing options...
patk29 Posted November 12, 2010 Author Share Posted November 12, 2010 (edited) non ce n'est pas cela qui pose problème, mêmes erreurs que précédemment. l'erreur se produit au moment du clic sur menu paramètres Edited November 12, 2010 by patk29 Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 12, 2010 Share Posted November 12, 2010 Alors là, perso, je sèche... Je vais continuer à chercher de mon coté... Mais si quelqu'un voit d'où cela pourrait venir, je suis preneur aussi... :) Quote Link to comment Share on other sites More sharing options...
Pierre87 Posted November 12, 2010 Share Posted November 12, 2010 pas de "return" pour "case MENU_PARAMETRE" normal? Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 12, 2010 Share Posted November 12, 2010 pas de "return" pour "case MENU_PARAMETRE" normal? Bien vu Pierre !!! Manque le "return true;" à la fin du case MENU_PARAMETRE Quote Link to comment Share on other sites More sharing options...
Pierre87 Posted November 12, 2010 Share Posted November 12, 2010 mais je ne pense pas que ça résolve le problème.... tu n'as pas d'autre messages en rouge? (ou d'autres) peux tu décrire plus précisément les actions que tu fais pour arriver à ce message d'erreur? Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 12, 2010 Share Posted November 12, 2010 D'après ce que j'ai compris, il suit les tutos du bouquin "Developper avec Android" de chez Eyrolles. Il a juste fait le tuto qui concernait les menus et sous menus. Sont exception pète apparemment au moment où il veut ouvrir le menu (avec le bouton de son tel). Quote Link to comment Share on other sites More sharing options...
Pierre87 Posted November 12, 2010 Share Posted November 12, 2010 si j'ai bien compris le principe du subMenu, il ne devrait pas y avoir de "case MENU_PARAMETRE:" dans "onOptionsItemSelected()" ou alors ça doit return false... car le submenu est géré par le système si je comprend bien... Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 12, 2010 Share Posted November 12, 2010 Je pense aussi... Sinon, ouvrir un dialog après un clic sur "Paramètres"... Mais du coup, on sortirait du sujet, on ne serait plus dans les sous-menus... Quote Link to comment Share on other sites More sharing options...
Pierre87 Posted November 12, 2010 Share Posted November 12, 2010 je ne vois pas la raison pour laquelle on devrait créer un Dialog pour "Paramètres" C'est au système de s'en occuper. Il manque aussi un bout de code pour les clic sur les sous menu "audio" et "video" Quote Link to comment Share on other sites More sharing options...
Kricek Posted November 12, 2010 Share Posted November 12, 2010 Dans le bouquin, il n'y en avait pas... C'est juste pour montrer comment ajouter des sous-menus. Quote Link to comment Share on other sites More sharing options...
patk29 Posted November 13, 2010 Author Share Posted November 13, 2010 mea culpa !!! effectivement ça marche avec le return du onOptionsitemSelected il était bien dans le bouquin. bizarre quand meme que ça le gêne pas a la compilation Quote Link to comment Share on other sites More sharing options...
Pierre87 Posted November 13, 2010 Share Posted November 13, 2010 c'est tout à fait normal que ça compile :) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.