在我的Activity的一些方法中,我想检查菜单的标题或知道它是否被选中。我怎样才能获得Activity的菜单。我需要像this.getMenu()
答案 0 :(得分:111)
警惕invalidateOptionsMenu()
。它重新创建整个菜单。这会产生大量开销,并会重置SearchView
等嵌入式组件。我花了很长时间来追踪我SearchView
“随机”关闭的原因。
我最终捕获了由Dark发布的菜单,然后根据需要调用onPrepareOptionsMenu(Menu)
。这符合我的要求,没有令人讨厌的副作用。问题:如果在创建菜单之前调用onPrepareOptionsMenu()
,请务必进行空检查。我这样做如下:
private Menu mOptionsMenu;
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
mOptionsMenu = menu
...
}
private void updateOptionsMenu() {
if (mOptionsMenu != null) {
onPrepareOptionsMenu(mOptionsMenu);
}
}
答案 1 :(得分:29)
调用invalidateOptionsMenu()而不是传递菜单对象。
答案 2 :(得分:12)
您可以通过将Menu对象传递给Activity类
来实现public class MainActivity extends Activity
{
...
...
private Menu _menu = null;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
_menu = menu;
return true;
}
private Menu getMenu()
{
//use it like this
return _menu;
}
}
答案 3 :(得分:1)
有几种回调方法可以提供菜单作为参数。
你可能想在那里操纵它。
例如:
onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
onCreateOptionsMenu(Menu menu)
onCreatePanelMenu(int featureId, Menu menu)
还有其他几个,最好看看活动文档并查找所需的方法: http://developer.android.com/reference/android/app/Activity.html
答案 4 :(得分:1)
据我所知,这里有什么可以帮助你:
1。请参阅本教程option menu。
2. 每次用户按下菜单按钮,您都可以通过getTitle()
检查其标题。
3. 或者,如果您想知道用户未按下菜单按钮时选中或选择的最后一个菜单项,则需要在用户按下时存储首选项。