0

我有一个包含三个项目的菜单,每个项目都单独显示在一个屏幕上。我在第二个屏幕中调用 invalidateOptionMenu() 来刷新操作栏颜色。颜色更改在 4.1.2 和 4.3 版本中都非常有效。

但是在 Android 4.3 上,当我调用它时,第一个屏幕的项目显示在第二个屏幕上。

这是我的代码(@Override public void onClick(View v):

                if (android.os.Build.VERSION.SDK_INT >= 11){
                final ActionBar actionBar = getActionBar();
                this.invalidateOptionsMenu();
                actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(couleur)));

            }

即使我在它不起作用后尝试这样做:

            final MenuItem saveNote = Menu.findItem(R.id.saveNote);
            final MenuItem removeNote = Menu.findItem(R.id.deleteNote);
            final MenuItem nouvelleNote = Menu.findItem(R.id.nouvelleNote);

            nouvelleNote.setVisible(false); //screen 1
            saveNote.setVisible(true); //screen 2
            removeNote.setVisible(false); //screen 3

下面是我如何覆盖 onCreateOptionsMenu:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        Menu = menu;
        getMenuInflater().inflate(R.menu.pumpkin_note, menu);

        final MenuItem saveNote = Menu.findItem(R.id.saveNote);
        final MenuItem removeNote = Menu.findItem(R.id.deleteNote);
        final MenuItem nouvelleNote = Menu.findItem(R.id.nouvelleNote);

        nouvelleNote.setVisible(true);
        saveNote.setVisible(false);
        removeNote.setVisible(false);

        return true;
    }
4

1 回答 1

1

在 onCreateOptionsMenu 你应该膨胀你的菜单

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }

在 onPrepareOptionsMenu 中,您应该通过某些条件更改菜单项的可见性

public boolean onPrepareOptionsMenu(Menu menu) {    
            menu.findItem(R.id.saveNote).setVisible(isFirstScreen);
            menu.findItem(R.id.deleteNote).setVisible(isSecondScreen);;
            menu.findItem(R.id.nouvelleNote).setVisible(isThirdScreen);;
    }   

要更新您的菜单,您应该调用 invalidateOptionMenu(),这会调用 onPrepareOptionsMenu 并再次重绘菜单

于 2013-10-21T22:15:21.327 回答