Modifier les options de menu en cours d'exécution - invalidateOptionsMenu()

Je suis entrain de créer un menu où l'un des éléments est utilisé le verrouillage d'un objet. Lorsque cet élément est sélectionné, le menu doit être recréé avec un bouton pour déverrouiller l'élément. J'ai créé deux menus pour cela. Cela fonctionne bien. J'ai lu que la version Android >= 11 onPrepareOptionsMenu n'est plus appelé lors de l'affichage du menu et que je dois appeler invalidateOptionsMenu(). J'ai donc changé la cible de génération (à la fois dans le Manifeste et propriétés) - 11 et a couru de l'application sur un AVD de la version 4.0.3. Le programme fonctionne encore très bien, mais j'ai pensé qu'il ne devrait pas, et de plus, je devrais vérifier

if (Build.VERSION.SDK_INT >= 11)
{
  invalidateOptionsMenu();
}

C'est mon code:

public class MainActivity3 extends Activity{

    boolean locked;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        locked = false;
    }

      @Override
      public boolean onCreateOptionsMenu(Menu menu){
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.changing_menu1, menu);

            return true;
        }

        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {

            menu.clear();
            MenuInflater inflater = getMenuInflater();

            if (locked) {
                inflater.inflate(R.menu.changing_menu2, menu);
            }
            else {
                inflater.inflate(R.menu.changing_menu1, menu);
            }

        return super.onPrepareOptionsMenu(menu);
        }

        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {

          case R.id.Menu1:
          break;

          case R.id.Menu2 :
          break;

          case R.id.Menu3 :
          locked = !locked;
          break;

           }
        return true;
        }
}

Donc le Menu est toujours actualisé/recréé dans la version 4.0.
Fait que j'ai mal compris quelque chose au sujet de l'utilisation de invalidateOptionsMenu();?

  • Je ne sais pas comment faire pour le signaler, mais même les développeurs android n'est 't assez claire à ce sujet. Vérifiez ici: developer.android.com/guide/topics/ui/... Si vous avez lu tout cela, vous comprendrez que invalidateOptionsMenu() ne fera pas appel onCreateOptionsMenu() et que, dans Android >= 11 OnPrepareOptionsMenu() ne fonctionne pas à chaque fois que vous ouvrez le menu... mais il le fait. WTHeck? La grande question erdomester et grande réponse @justinmorris
InformationsquelleAutor erdomester | 2012-11-01