56 votes

Définir la visibilité dans le menu par programmation Android

Alors, c'est ce que je veux savoir. Comment puis-je définir la visibilité du menu par programmation dans Android ?? Voici comment j'ai mon menu:

 public boolean onCreateOptionsMenu(Menu menu){
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}

public boolean onOptionsItemSelected (MenuItem item){
    switch (item.getItemId()){
        case R.id.menuregistrar:
            break;
        case R.id.menusalir:
            break;
    }
    return true;
}

Mais ce code n'est pas sur le onCreate, donc je ne sais pas comment rendre un élément visible ou invisible par programmation (dans mon cas, je veux que le "menuregistrar" soit invisible une fois que j'ai enregistré mon application et pour toujours.

151voto

Adil Soomro Points 18868

Mettez cette méthode dans votre Activity

 public boolean onPrepareOptionsMenu(Menu menu)
{
    MenuItem register = menu.findItem(R.id.menuregistrar);      
    if(userRegistered) 
    {           
        register.setVisible(false);
    }
    else
    {
        register.setVisible(true);
    }
    return true;
}

en version plus courte, vous pourriez écrire :

 MenuItem register = menu.findItem(R.id.menuregistrar);      
register.setVisible(!userRegistered);  //userRegistered is boolean, pointing if the user has registered or not.
return true;

10voto

jakeneff Points 113

Je simplifierais encore plus la solution d'Adil avec ce qui suit :

 public boolean onPrepareOptionsMenu(Menu menu)
{
    MenuItem registrar = menu.findItem(R.id.menuregistrar);      
    registrar.setVisible(!isRegistered);
    return true;
}

5voto

Hantash Nadeem Points 166

L'objet de menu a une propriété pour définir la visibilité d'un élément de menu à l'aide de setVisible(boolean)//

Exemple

 private Menu menu_change_language;
...

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    ...
    ...
    menu_change_language = menu;
    ...
    ...

    return super.onCreateOptionsMenu(menu);
}

utilisez le code ci-dessous pour masquer l'élément de menu :

 if(menu_change_language != null){                 
    menu_change_language.findItem(R.id.menu_change_language)
       .setVisible(false);
}

3voto

Sergey Benner Points 4089

Utilisez public boolean onPrepareOptionsMenu (Menu menu) il est appelé à chaque fois que vous appuyez sur le bouton de menu et que vous faites votre travail là-bas. ou utilisez votre oncreateoptionsmenu() dans différentes activités pour gonfler différents menus - celui-ci n'est appelé qu'une seule fois.

À votre santé

3voto

guy Points 972

Si vous souhaitez modifier la visibilité à l'intérieur de onOptionsItemSelected chaque fois que vous cliquez sur le menu

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
   item.setVisible(true);
   return true;
}

OU pour l'élément du menu sur lequel vous n'avez pas cliqué

 private Menu globalMenuItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu."menu Xml Name", menu);
   globalMenuItem = menu;
   return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
   globalMenuItem.findItem(R.id."id of the menu item").setVisible(true);
   return true;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X