2012-11-28 33 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));

相关问题