Android invalidateOptionsMenu() для API < 11

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

ActivityCompat.invalidateOptionsMenu(MainActivity.this) отлично работает в Android 11+. Но что я могу использовать для Android API < 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;
}

3 ответа

Решение

На 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 меню отображалось при нажатии кнопки меню, поэтому в этом методе нет необходимости, поскольку он происходит автоматически.

Другие вопросы по тегам