Mogę to łatwo zrobić, używając metod onCreateOptionsMenu
lub onOptionsItemSelected
.
Ale mam przycisk gdzieś na ekranie i po kliknięciu tego przycisku powinien on włączać / wyłączać elementy menu kontekstowego.
źródło
Mogę to łatwo zrobić, używając metod onCreateOptionsMenu
lub onOptionsItemSelected
.
Ale mam przycisk gdzieś na ekranie i po kliknięciu tego przycisku powinien on włączać / wyłączać elementy menu kontekstowego.
W każdym razie dokumentacja obejmuje wszystkie rzeczy.
Po utworzeniu działania
onCreateOptionsMenu()
metoda jest wywoływana tylko raz, jak opisano powyżej. System zachowuje i ponownie wykorzystujeMenu
zdefiniowane w tej metodzie wartości, dopóki Twoja aktywność nie zostanie zniszczona. Jeśli chcesz zmienić menu opcji w dowolnym momencie po jego pierwszym utworzeniu, musisz nadpisaćonPrepareOptionsMenu()
metodę. Spowoduje to przekazanie obiektu Menu w takiej postaci, w jakiej obecnie istnieje. Jest to przydatne, jeśli chcesz usunąć, dodać, wyłączyć lub włączyć elementy menu w zależności od bieżącego stanu aplikacji.
Na przykład
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
if (isFinalized) {
menu.getItem(1).setEnabled(false);
// You can also use something like:
// menu.findItem(R.id.example_foobar).setEnabled(false);
}
return true;
}
W systemie Android 3.0 i nowszych menu opcji jest uważane za zawsze otwarte, gdy elementy menu są prezentowane na pasku akcji. Gdy wystąpi zdarzenie i chcesz wykonać aktualizację menu, musisz zadzwonić, invalidateOptionsMenu()
aby zażądać wywołania systemowego onPrepareOptionsMenu()
.
setEnable()
zmienia to, co się dzieje po naciśnięciu tego menu, ale nie zmienia jego wyglądu (co jest nie tak, programiści Androida?). Dlatego łatwiej jest wyłączyć i zmienić tytuł, a najlepiej po prostu uczynić goMenuItem
niewidzialnym.false
aby całkowicie wyłączyć menu.We wszystkich wersjach Androida najprostszy sposób: użyj tego, aby POKAZYĆ ikonę akcji menu jako wyłączoną ORAZ sprawić, by działała również jako wyłączona:
źródło
Możesz zapisać element jako zmienną podczas tworzenia menu opcji, a następnie dowolnie zmieniać jego właściwości.
źródło
onPrepareOptionsMenu
?uprościć wersję @Vikas
źródło
Jak zaktualizować bieżące menu, aby włączyć lub wyłączyć elementy po zakończeniu AsyncTask.
W moim przypadku musiałem wyłączyć moje menu, gdy mój AsyncTask ładował dane, a następnie po załadowaniu wszystkich danych musiałem ponownie włączyć całe menu, aby użytkownik mógł z niego korzystać.
Uniemożliwiło to aplikacji umożliwienie użytkownikom klikania elementów menu podczas ładowania danych.
Najpierw deklaruję zmienną stanu, jeśli zmienna ma wartość 0, menu jest wyświetlane, jeśli ta zmienna ma wartość 1, menu jest ukryte.
Następnie w moim
onCreateOptionsMenu()
sprawdzam tę zmienną, jeśli jest 1, wyłączam wszystkie moje elementy, jeśli nie, po prostu je wszystkie pokazujęTeraz, gdy rozpocznie się moja aktywność,
onCreateOptionsMenu()
zostanie wywołana tylko raz, a wszystkie moje elementy znikną, ponieważ ustawiłem dla nich stan na początku.Następnie tworzę AsyncTask, w którym ustawiam tę zmienną stanu na 0 w pliku
onPostExecute()
Ten krok jest bardzo ważny!
Kiedy zadzwonisz
invalidateOptionsMenu();
, uruchomi się ponownieonCreateOptionsMenu();
Tak więc, po ustawieniu mojego stanu na 0, po prostu przerysowuję całe menu, ale tym razem z moją zmienną na 0, co oznacza, że całe menu zostanie wyświetlone po zakończeniu całego procesu asynchronicznego, a następnie mój użytkownik może korzystać z menu .
Wyniki
źródło
najlepsze rozwiązanie, gdy grasz w szufladzie nawigacji
źródło
Bardziej nowoczesna odpowiedź na stare pytanie:
MainActivity.kt
menu_main_activity.xml
menu_item_icon_selector.xml
attrs.xml
styles.xml or themes.xml
źródło
źródło
Zapisałem odniesienie do menu pod adresem
onCreateOptionsMenu
. Jest to podobne do odpowiedzi nir, z tym że zamiast zapisywać każdą pojedynczą pozycję, zapisałem całe menu.Zadeklaruj menu
Menu toolbarMenu;
.Następnie
onCreateOptionsMenu
zapisz menu do swojej zmiennejTeraz możesz uzyskać dostęp do swojego menu i wszystkich jego pozycji w dowolnym momencie.
toolbarMenu.getItem(0).setEnabled(false);
źródło
źródło
Jeśli widoczne menu
Jeśli ukryj menu
źródło
Ogólnie można zmienić właściwości widoków w czasie wykonywania:
i wtedy...
ale
jeśli chcesz zmodyfikować widoczność opcji z ContextMenu, po naciśnięciu przycisku możesz aktywować flagę, a następnie w onCreateContextMenu możesz zrobić coś takiego:
mam nadzieję, że to pomoże
źródło
onCreateContextMenu
metodzie. Ale chcę uzyskać dostęp do menu kontekstowego poza tą metodą.onCreateContextMenu
zostanie wywołana tylko raz, ale mogę klikać przycisk dużo czasu, aby włączyć / wyłączyć element menu.