Android invalidateOptionsMenu () для API <11


76

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

ActivityCompat.invalidateOptionsMenu(MainActivity.this)Відмінно працює в Android 11+. Але що я можу використовувати для android API <11? : S Я так багато шукав, але не можу знайти відповіді. Хто-небудь може допомогти мені у цьому?

Це чудово працює в Android API 11+, використовуючи onPrepareOptionsMenuі ActivityCompat.invalidateOptionsMenu(MainActivity.this). Проблема намагається зробити це за допомогою API Android <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
Я пропоную вам змінити метод на smth, як @Override public boolean onPrepareOptionsMenu (меню меню) {menu.getItem (0) .setEnabled (menuRefreshEnable); повернути істинно; }
Олександр Жак

Відповіді:



5

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.


0

Це поверне true, якщо API вище або дорівнює 11 і тому підтримується. Перед API 11 меню накреслюється при натисканні кнопки меню, тому немає необхідності в цьому методі, оскільки він відбувається автоматично.


1
Мені потрібно, щоб пункти меню оновлювались без взаємодії користувача з кнопкою меню. Уявіть, що користувач залишає меню відкритим під час запуску мого завдання асинхронізації ... За допомогою цього методу меню меню автоматично оновлюється в api 11+. Якщо я його видалю, це не працює. Але мені все одно потрібно автоматичне оновлення меню itens в android api <11.
SnitramSD

2
Коли мої асинхронні завдання закінчуються, я виконую рядок ActivityCompat.invalidateOptionsMenu (MainActivity.this); щоб оновити меню. Але це працює лише в api 11+. Як я можу змусити оновити елементи меню в api <11 без взаємодії користувача з кнопкою меню (щось подібне до ActivityCompat.invalidateOptionsMenu (MainActivity.this); в api <11)?
SnitramSD

Практично шляхом програмного натискання кнопки меню двічі на пристроях <11.
AndroidPenguin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.