Android invalidateOptionsMenu() для API <11

Я использовал ActivityCompat.invalidateOptionsMenu(MainActivity.this);, чтобы мой пункт меню "Обновить" можно автоматически включить/отключить без использования, чтобы коснуться опции "Меню" (представьте, что пользователь покидает меню в открывшемся окне... Мне нужно "Обновить", пункт меню для автоматического отключения и включения самого).

ActivityCompat.invalidateOptionsMenu(MainActivity.this) отлично работает в Android 11+. Но что я могу использовать для API android, 11?: S Я искал столько, но не могу найти ответа. Может ли кто-нибудь помочь мне в этом?

Это отлично работает в Android API 11+, используя onPrepareOptionsMenu и ActivityCompat.invalidateOptionsMenu(MainActivity.this). Проблема заключается в том, чтобы сделать это в Android API < 11.

Вот мой метод onPrepareOptionsMenu:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(menuRefreshEnable){
        menu.getItem(0).setEnabled(true);
    }
    if(!menuRefreshEnable){
        menu.getItem(0).setEnabled(false);
    }       
    return true;
}

Ответ 1

В API < 11 используйте метод supportInvalidateOptionsMenu()

Ответ 2

ActivityCompat.invalidateOptionsMenu() не отвечает onPrepareOptionsMenu();, он просто обновляет меню напрямую. Просто поместите некоторые Log.d() и проверьте сами.

Это работает для меня (я использую API 8):

private Menu mMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.track_fragment, menu);
    mMenu = menu;
    }
...
private void someMethod() {
...
    if (mMenu != null) {
       MenuItem item = mMenu.findItem(R.id.new_track);
       if (item != null) {
            item.setVisible(false);
            ActivityCompat.invalidateOptionsMenu(this.getActivity());
        }
    }
...
}

My someMethod() вызывается из нескольких мест, даже до onCreateOptionsMenu(), поэтому я должен проверить mMenu != null.

Ответ 3

Это вернет true, если API выше или равен 11 и поэтому поддерживается. Перед API 11 меню вызывается при нажатии кнопки меню, поэтому нет необходимости в этом методе, поскольку он возникает автоматически.