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

Bob*_*obs 40 android menu optionmenu

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

Dus*_*tin 112

要小心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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 使用此方法,只要屏幕被批准,我就会一直为空。 (2认同)

小智 30

调用invalidateOptionsMenu()而不是传递菜单对象.

  • 不幸的是,在API级别11中添加:( (4认同)

小智 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 调用invalidateOptionsMenu()更好!并且您只需要在onPrepareOptionsMenu(Menu menu)方法中提供更新即可。 (2认同)