46

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

4

6 回答 6

120

警惕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);
    }
}
于 2013-12-19T21:52:43.570 回答
30

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

于 2013-02-08T08:39:22.390 回答
14

您可以通过将 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;
    }
}
于 2013-01-13T12:41:13.440 回答
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

于 2012-05-14T07:56:46.977 回答
1

据我所知,您在这里想要的可能会对您有所帮助:

1.通过选项菜单参考本教程。

2.每次用户按下菜单按钮,你可以通过它检查它的标题getTitle()

3.或者,如果您想知道用户没有按下菜单按钮时检查或选择的最后一个菜单项,那么您需要在用户按下时存储首选项。

于 2012-05-14T08:11:43.970 回答
0

Android 现在有工具栏小部件,它是您可以设置/获取的菜单。使用 setSupportActionBar(Toolbar) 的一些变体在您的 Activity 中设置工具栏,例如来自 Fragment 的 onCreateOptionsMenu 之类的东西。线程复活了!

于 2021-10-07T18:21:59.277 回答