2012-11-28 22 views
9

Czy istnieje sposób programowego wyboru opcji menu? Zasadniczo chcę przycisk w widoku, aby wykonać tę samą akcję, co naciśnięcie określonej opcji menu. Myślałem o próbie wywołania onOptionsItemSelected (element MenuItem), ale nie wiem, co umieścić w pozycji menu.Android - Programowo wybierz opcję menu

Odpowiedz

13

Dlaczego oba zdarzenia interfejsu użytkownika nie wywołują wspólnej metody?

+1

Najprostsze odpowiedzi są często najlepsze;) +1 – Squonk

+0

Mam pewien wspólny kod w onOptionsItemSelected() dla wszystkich elementów menu, których raczej nie chciałbym podzielić. Miałem nadzieję, że istnieje prosty sposób na wywołanie opcji menu. – dt0

+0

@ dt0 Zawsze istnieje sposób na refaktoryzację kodu i sprawienie, że będzie SUCHY i ładny, zwłaszcza jeśli jest to twój własny kod. Jeśli wspólny kod jest zbiorem zmiennych uruchomieniowych, być może możesz użyć struktury, która będzie zawierała wszystko w jednym miejscu. Jeśli to funkcjonalne, może możesz je zinterpretować na użyteczne metody. Zawsze jest jakiś sposób i zdecydowanie uważam, że nie należy wywoływać jednego zdarzenia interfejsu z innego. Jeśli myślisz o wyrazistości swojego kodu, menu nie zostało kliknięte, więc wywołanie zdarzenia z menu jest trochę dziwne. – Rich

15

Tak, istnieje sposób wyboru opcji menu! I masz rację o wywołanie onOptionsItemSelected (pozycja MENUITEM) oto sposób, aby uzyskać MenuItem:

1) Pierwszą rzeczą, którą trzeba zrobić, to odniesienie do klasy Menu wewnątrz swojej działalności tutaj:

private Menu menu; 

@Override 
public boolean onCreateOptionsMenu(final Menu menu) { 
    this.menu = menu; 
    return super.onCreateOptionMenu(menu); 
} 

2) Tak więc klasa Menu zawiera wszystkie pozycje menu. Więc skoro masz to odniesienie, symulować kliknij menu tak:

onOptionsItemSelected(menu.findItem(R.id.action_id)); 

... gdzie action_id jest identyfikatorem elementu menu, które chcesz wybrać. możesz znaleźć ten identyfikator w swoim menu xml.

0

Szukałem tego również. i chociaż ma sens wywoływanie metody używanej, gdy element zostanie sprawdzony, to nie ustawi elementu menu jako sprawdzonego w interfejsie użytkownika.

Więc co skończyło się robi było:

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

MenuItem menuItem = (MenuItem)navigationView.getMenu().findItem(R.id.nav_menu_item_1); 
     menuItem.setChecked(true); 
     onNavigationItemSelected(menuItem); 

Następujące nie działa zgodnie z oczekiwaniami dla mnie:

onOptionsItemSelected (menu.findItem (R.id.action_id));

Powiązane problemy