2012-11-28 45 views
9

有沒有辦法以編程方式選擇菜單選項?基本上,我想要一個視圖中的按鈕執行與按特定菜單選項相同的操作。我正在考慮嘗試調用onOptionsItemSelected(MenuItem項目),但我不知道要爲菜單項放置什麼。Android - 以編程方式選擇菜單選項

回答

13

爲什麼你沒有兩個UI事件調用一個常用的方法?

+1

最簡單的答案往往是最好的;)+1 – Squonk

+0

我在onOptionsItemSelected()的所有,我寧願不分裂的菜單項一些共享代碼。我只是希望有一個簡單的方法來調用菜單選項。 – dt0

+0

@ dt0總有一種方法可以重構代碼並使其變得乾乾淨淨,特別是如果它是您自己的代碼。如果共享代碼是一堆運行時變量,那麼也許你可以使用一個將所有代碼都包含在一個地方的結構。如果它是功能性的東西,也許你可以將它分解成實用方法。總有辦法,我強烈地考慮不要從另一個UI中調用一個UI事件。如果你考慮代碼的表現力,菜單沒有被點擊,所以調用菜單點擊事件有點奇怪。 – Rich

15

是的,有一種方法可以選擇一個菜單選項!你是對有關調用onOptionsItemSelected(菜單項項)這裏是獲得菜單項的方式:

1)你需要做的第一件事就是讓你的活動在這裏裏面的菜單類的引用:

private Menu menu; 

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

2)所以基本上,Menu類包含所有菜單項。所以一旦你有這樣的參考,您可以模擬菜單中單擊像這樣:

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

...其中的action_id是你要選擇的菜單項的ID。你可以在你的菜單xml中找到這個id。

0

我也在尋找這個。儘管調用項目被檢查時使用的方法是有意義的,但它不會將菜單項設置爲在UI中檢查。

所以我落得這樣做:

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); 

根據需要爲我下面沒有工作:

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

相關問題