patk29 Posté(e) 10 novembre 2010 Share Posté(e) 10 novembre 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 10 novembre 2010 Share Posté(e) 10 novembre 2010 (modifié) 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? Modifié 10 novembre 2010 par Kricek Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
patk29 Posté(e) 10 novembre 2010 Auteur Share Posté(e) 10 novembre 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 ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 10 novembre 2010 Share Posté(e) 10 novembre 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... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
patk29 Posté(e) 11 novembre 2010 Auteur Share Posté(e) 11 novembre 2010 j'ai un message du genre: activity com.exemple.menu has leaked window com.android.internal.policy.impl.... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 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? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
patk29 Posté(e) 12 novembre 2010 Auteur Share Posté(e) 12 novembre 2010 (modifié) 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) Modifié 12 novembre 2010 par patk29 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 (modifié) 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? Modifié 12 novembre 2010 par Kricek Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
patk29 Posté(e) 12 novembre 2010 Auteur Share Posté(e) 12 novembre 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; } } } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 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...). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
patk29 Posté(e) 12 novembre 2010 Auteur Share Posté(e) 12 novembre 2010 (modifié) 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 Modifié 12 novembre 2010 par patk29 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 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... :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 pas de "return" pour "case MENU_PARAMETRE" normal? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 pas de "return" pour "case MENU_PARAMETRE" normal? Bien vu Pierre !!! Manque le "return true;" à la fin du case MENU_PARAMETRE Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 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? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 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). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 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... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 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... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 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" Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 Dans le bouquin, il n'y en avait pas... C'est juste pour montrer comment ajouter des sous-menus. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
patk29 Posté(e) 13 novembre 2010 Auteur Share Posté(e) 13 novembre 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 13 novembre 2010 Share Posté(e) 13 novembre 2010 c'est tout à fait normal que ça compile :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.