2012-11-28 8 views
9

プログラムでメニューオプションを選択する方法はありますか?基本的には、特定のメニューオプションを押すのと同じアクションを実行するビューのボタンが必要です。私はonOptionsItemSelected(MenuItem項目)を呼び出そうとしていましたが、メニュー項目を何に入れるべきかわかりません。Android - プログラムでメニューオプションを選択する

答えて

13

両方のUIイベントで共通のメソッドを呼び出すのはなぜですか?

+1

最も簡単な答えはしばしば最高です;)+1 – Squonk

+0

私は分割したくないすべてのメニュー項目に対して、onOptionsItemSelected()に共有コードをいくつか持っています。そして、メニューオプションを呼び出す簡単な方法があると私はちょっと思っていました。 – dt0

+0

@ dt0コードをリファクタリングしてDRYとかなりのものにする方法は常にあります。特にそれがあなたのコードである場合は特にそうです。共有コードがランタイム変数の束である場合、おそらく、すべてを1つの場所に格納する構造を使用できます。それが機能的なものなら、多分それをユーティリティメソッドに分解することができます。常に方法があります。私はUIイベントを別のイベントから呼び出さないことを強く検討します。あなたのコードの表現力について考えるなら、メニューはクリックされなかったので、メニュークリックイベントを呼び出すことはちょっと奇妙です。 – Rich

15

はいメニューオプションを選択する方法があります。そして、あなたはここにonOptionsItemSelected(MenuItemの項目)を呼び出すについて正しいのMenuItemを取得する方法である:

1)あなたがする必要がある最初の事はここにあなたの活動の内部Menuクラスの参照を取得します:

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です:あなたはこの参照を持って一度だから、あなたはこのようなメニューのクリックをシミュレートします。このIDはメニューのxmlで見つけることができます。

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