Aller au contenu

création de menu


patk29

Recommended Posts

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

Lien vers le commentaire
Partager sur d’autres sites

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é par Kricek
Lien vers le commentaire
Partager sur d’autres sites

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?

Lien vers le commentaire
Partager sur d’autres sites

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é par patk29
Lien vers le commentaire
Partager sur d’autres sites

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é par Kricek
Lien vers le commentaire
Partager sur d’autres sites

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;    	
   	}
   }
}

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...