Android invalidateOptionsMenu () dla API <11

Użyłem ActivityCompat.invalidateOptionsMenu(MainActivity.this); tak, że mój element menu "Odśwież" może być automatycznie włączony / wyłączony bez konieczności korzystania z opcji "Menu" (wyobraź sobie, że użytkownik pozostawia Menu otwarte... Potrzebuję pozycji menu "Odśwież", aby automatycznie wyłączyć i włączyć się).

The ActivityCompat.invalidateOptionsMenu(MainActivity.this) działa dobrze w Androidzie 11+. Ale czego mogę użyć dla android API

To działa dobrze w Android API 11+, przy użyciu onPrepareOptionsMenu i ActivityCompat.invalidateOptionsMenu(MainActivity.this). Problem polega na próbie zrobienia tego w Android API

Oto moja metoda onPrepareOptionsMenu:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(menuRefreshEnable){
        menu.getItem(0).setEnabled(true);
    }
    if(!menuRefreshEnable){
        menu.getItem(0).setEnabled(false);
    }       
    return true;
}
Author: Czechnology, 2012-12-23

3 answers

On API < 11 use supportInvalidateOptionsMenu() method

 231
Author: Alexander Zhak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-18 11:10:27

ActivityCompat.invalidateOptionsMenu() nie oddzwania {[2] } to po prostu aktualizuje menu bezpośrednio. Po prostu włóż trochę Log.d() i sprawdź sam.

To działa dla mnie (używam 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());
        }
    }
...
}

Moje someMethod() dzwonią z kilku miejsc, nawet przed onCreateOptionsMenu(), więc muszę sprawdzić mMenu != null.

 5
Author: Sufian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-23 06:05:16

Zwróci true, jeśli API jest powyżej lub równe 11 i dlatego jest obsługiwane. Przed API 11 menu jest rysowane po naciśnięciu przycisku menu, więc nie ma potrzeby stosowania tej metody, ponieważ dzieje się to automatycznie.

 0
Author: AndroidPenguin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-23 04:15:01