如何获取我的活动的选项菜单?

时间:2012-05-14 07:48:26

标签: android menu optionmenu

在我的Activity的一些方法中,我想检查菜单的标题或知道它是否被选中。我怎样才能获得Activity的菜单。我需要像this.getMenu()

这样的东西

5 个答案:

答案 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. 或者,如果您想知道用户未按下菜单按钮时选中或选择的最后一个菜单项,则需要在用户按下时存储首选项。