Android invalidateOptionsMenu () для API

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

на ActivityCompat.invalidateOptionsMenu(MainActivity.this) отлично работает в Android 11+. Но что я могу использовать для Android API

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

вот мой onPrepareOptionsMenu способ:

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

3 ответов


On API < 11 использовать supportInvalidateOptionsMenu() метод


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());
        }
    }
...
}

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


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