Próbuję zmienić tytuł pozycji menu spoza onOptionsItemSelected(MenuItem item)
metody.
Już robię następujące;
public boolean onOptionsItemSelected(MenuItem item) {
try {
switch(item.getItemId()) {
case R.id.bedSwitch:
if(item.getTitle().equals("Set to 'In bed'")) {
item.setTitle("Set to 'Out of bed'");
inBed = false;
} else {
item.setTitle("Set to 'In bed'");
inBed = true;
}
break;
}
} catch(Exception e) {
Log.i("Sleep Recorder", e.toString());
}
return true;
}
chciałbym jednak móc zmienić tytuł określonego elementu menu poza tą metodą.
Odpowiedzi:
Zgodnie z sugestią JxDarkAngel, nazywając to z dowolnego miejsca w Aktywności ,
a następnie zastąpienie:
jest znacznie lepszym wyborem. Użyłem odpowiedzi z https://stackoverflow.com/a/17496503/568197
źródło
onPrepareOptionsMenu()
jest często wywoływany przez system Android, na przykład podczas wyświetlania działania i za każdym razem, gdy wyświetlane jest menu. Może to nie być bardzo wydajne, jeśli twoje menu nie zmienia się bardzo często.invalidateOptionsMenu()
również zadzwonionCreateOptionsMenu()
, aby można było wprowadzić logikę aktualizacjionCreateOptionsMenu()
.Sugerowałbym zachowanie odniesienia w ramach działania do obiektu Menu otrzymanego w onCreateOptionsMenu, a następnie użycie go do pobrania MenuItem, który wymaga zmiany, kiedy i kiedy jej potrzebujesz. Na przykład możesz zrobić coś w następujący sposób:
Alternatywnie można zastąpić opcję onPrepareOptionsMenu, aby aktualizować elementy menu za każdym razem, gdy menu jest wyświetlane.
źródło
możesz to zrobić, utwórz globalny obiekt „Menu”, a następnie przypisz go w onCreateOptionMenu
następnie przypisz tutaj
Następnie użyj przypisanego obiektu Menu, aby uzyskać wymagane elementy
źródło
Utwórz metodę setOptionsTitle () i ustaw pole w swojej klasie. Jak na przykład:
...
Teraz, gdy menu się zapełni, zmień tytuł na dowolny status:
źródło
Lepiej użyj zastąpienia onPrepareOptionsMenu
Oto przykład
źródło
Używam tego kodu do kostiumowania mojego dolnego elementu nawigacyjnego
źródło
Zadeklaruj pole menu.
Poniżej znajduje się metoda onCreateOptionsMenu ()
Poniżej będzie twoja nazwa użytkownika. Albo poprzez kliknięcie przycisku, albo poprzez kod warunkowy
To zadziałało dla mnie.
źródło
Wydaje mi się, że chcesz zmienić zawartość menu w metodzie lokalnej i ta metoda jest wywoływana w dowolnym momencie, za każdym razem, gdy wystąpi zdarzenie lub w wątku interfejsu użytkownika działania.
Dlaczego nie weźmiesz wystąpienia Menu w zmiennej globalnej w onPrepareOptionsMenu, gdy jest to nadpisane i nie użyjesz tej metody. Upewnij się, że ta metoda jest wywoływana za każdym razem, gdy wystąpi zdarzenie (np. Kliknięcie przycisku) lub w wątku interfejsu użytkownika działania, module obsługi lub zadaniu asynchronicznym po wykonaniu.
Powinieneś wiedzieć z góry indeks tego elementu menu, który chcesz zmienić. Po wyczyszczeniu menu musisz napompować menu XML i zaktualizować nazwę lub ikonę elementu.
źródło
Dla osób, które potrzebują zestawu statycznego. Można to zrobić w pliku AndroidManifest.xml
źródło
Musiałem zmienić ikonę menu dla tego fragmentu. Zmieniłem nieco odpowiedź Charlesa na to pytanie dla fragmentu:
źródło